在Swift中给出以下内容:
var optionalString: String?
let dict = NSDictionary()
Run Code Online (Sandbox Code Playgroud)
以下两个陈述之间的实际区别是什么:
optionalString = dict.objectForKey("SomeKey") as? String
Run Code Online (Sandbox Code Playgroud)
VS
optionalString = dict.objectForKey("SomeKey") as! String?
Run Code Online (Sandbox Code Playgroud) 我正在Swift中构建一个iOS应用程序,并利用Apple提供的Lister示例项目.
Lister使用两个模型对象:List和ListItem.我发现super.init()
即使它们是NSObject的子类,它们都不会调用它们的初始化器.
但是,在Lister的Objective-C版本中,两个模型对象(AAPLList和AAPLListItem)都会调用[super init]
.
在斯威夫特编程语言中明确指出,"指定的初始化程序必须调用从他们的直接超类的指定初始化方法."(初始化程序链接在初始化的第1条)
这里发生了什么?为什么这是一个例外,如果你不应该总是在子类中调用super.init(),那么适用哪些规则?