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
        }
    }
}

您正在调用的init
self.init(string:string)
本身就是一个方便的初始化器-您应该调用完整的指定初始化器
init?(string-URLString:string,relativeToURL-baseURL:NSURL?)

方便的初始值设定者是否有责任确保所有存储的属性都已初始化(通过调用指定的初始值设定者或自行初始化它们)?即,在上述可失效初始值设定项中,我是否调用指定初始值设定项与方便初始值设定项没有区别。(已尝试,编译器抛出相同错误)