Swift 为什么赢了';NSURL(采用可选字符串)编译时是否存在此失败的初始值设定项?
我很难理解为什么这个不能编译。编译器抛出错误:Swift 为什么赢了';NSURL(采用可选字符串)编译时是否存在此失败的初始值设定项?,swift,initialization,optional-parameters,Swift,Initialization,Optional Parameters,我很难理解为什么这个不能编译。编译器抛出错误:在从初始值设定项返回nil之前,必须初始化类实例的所有存储属性 错误消息本身没有什么意义,因为初始化失败就是失败。仅当对象实际已初始化时,才需要初始化存储的属性,不是吗 当我省略else{return nil}时,编译器抛出一个不同的错误:在调用“self.init”之前,在委托初始值设定项时使用“self” extension NSURL { convenience init?(optionalString: String?) {
在从初始值设定项返回nil之前,必须初始化类实例的所有存储属性
错误消息本身没有什么意义,因为初始化失败就是失败。仅当对象实际已初始化时,才需要初始化存储的属性,不是吗
当我省略else{return nil}
时,编译器抛出一个不同的错误:在调用“self.init”之前,在委托初始值设定项时使用“self”
extension NSURL {
convenience init?(optionalString: String?) {
if let string = optionalString {
self.init(string: string)
} else {
return nil
}
}
}
您正在调用的initself.init(string:string)
本身就是一个方便的初始化器-您应该调用完整的指定初始化器init?(string-URLString:string,relativeToURL-baseURL:NSURL?)
方便的初始值设定者是否有责任确保所有存储的属性都已初始化(通过调用指定的初始值设定者或自行初始化它们)?即,在上述可失效初始值设定项中,我是否调用指定初始值设定项与方便初始值设定项没有区别。(已尝试,编译器抛出相同错误)