当前位置:  开发笔记 > 编程语言 > 正文

我需要一个便利初始化器吗?

如何解决《我需要一个便利初始化器吗?》经验,为你挑选了1个好方法。

新的快速.在我的课上,我有我的主要初始化程序(指定),如下所示:

init(name: String, location: String, image: UIImage) {

        self.name = name
        self.location = location
        self.image = image
        postDate = NSDate()
        dateString = getDateString()

    }

然后我在它下面有另一个初始化程序,它实际上将两个日期对象传递给参数而不是创建它们:

  init(name: String, location: String, date: NSDate, dateString: String, image: UIImage) {

        self.name = name
        self.location = location
        self.image = image
        postDate = date
        self.dateString = dateString


    }

我需要将其作为便利初始化程序吗?如果我把它变成一个方便,我知道我必须在它之前放置方便,但为什么要这么麻烦?这有什么好处吗?



1> Diego Frenic..:

在你的课堂上,你基本上是在每个初始化器中复制和粘贴.这是一种不好的做法,因为有时你会忘记初始化一些属性(如果它是可选的).而且所有这些重复的代码都是清晰的代码味道:它更难维护.如果您需要更改某些内容,请使用7种init方法进行更改...

所以这里的内容可以convenience帮到你.主要思想是你有一个指定的init,一个具有最长参数列表的init(这是最具体的一个,因为你有最多的数据来创建你的对象).如果你需要调用super,可以在这个指定的init中执行.

所有其他的inits都有较少的数据来创建对象,所以它们更通用.从这些"便利"中调用指定的init,传入默认值.

class Test1 {

    var name: String
    var location: String
    var image: UIImage
    var postDate: NSDate
    var dateString: String

    convenience init(name: String, location: String, image: UIImage) {
        self.init(name: name, location: location, date: NSDate(), dateString: "", image: image)
    }

    init(name: String, location: String, date: NSDate, dateString: String, image: UIImage) {

        self.name = name
        self.location = location
        self.image = image
        postDate = date
        self.dateString = dateString
    }
}

另外:你不应该在你的内部调用函数/方法.self尚未完全初始化.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有