以下是一个示例类的布局,有人可以指导我在创建NSObject的子类时的最佳实践吗?
class MyClass: NSObject {
var someProperty: NSString! = nil
override init() {
self.someProperty = "John"
super.init()
}
init(fromString string: NSString) {
self.someProperty = string
super.init()
}
}
这是正确的,我是否遵循此处的最佳做法?
我想知道我是否正确设置了初始值设定项(一个将字符串设置为默认值,另一个可以传递给字符串)?
我应该在每个初始值设定项的末尾调用super.init()
吗?
我的更多特定(带字符串的那个)初始化程序是否应该在结尾处调用self.init()
而不是super.init()
?
在子类化NSObject
时,在Swift中设置初始值设定项的正确方法是什么? - 我该如何调用super init?
这个问题(尽管在目标C中)表明你应该有一个你总是打电话的init,只是设置更具体的属性:Objective-C Multiple Initialisers
答案 0 :(得分:53)
我不是Swift忍者,但我会写MyClass
为:
class MyClass: NSObject {
var someProperty: NSString // no need (!). It will be initialised from controller
init(fromString string: NSString) {
self.someProperty = string
super.init()
}
convenience override init() {
self.init(fromString:"John") // calls above mentioned controller with default name
}
}
答案 1 :(得分:2)
如果someProperty可以为nil,那么我认为你想要将属性定义为:
var someProperty: NSString?
这也消除了对自定义初始化程序的需求(至少对于此属性),因为属性在初始化时不需要值。
答案 2 :(得分:1)
作为答案的补充,一个好主意是在其他语句之前调用super.init()。我认为这对Swift来说是一个更强烈的要求,因为分配是隐含的。