swift - 为什么 NSURL 上的这个可失败初始化器(采用可选字符串)无法编译?

标签 swift initialization optional-parameters

我有点难以理解为什么这不会编译。编译器抛出以下错误:在从初始化程序返回 nil 之前必须初始化类实例的所有存储属性

错误消息本身并没有多大意义,因为初始化失败就是失败。如果对象实际已初始化,则存储属性应该只需要初始化,不是吗?

当我省略 else { return nil } 时,编译器会抛出一个不同的错误:Use of 'self' in delegating initializer before 'self.init' is called .

extension NSURL {
    convenience init?(optionalString: String?) {
        if let string = optionalString {
            self.init(string: string)
        } else {
            return nil
        }
    }
}

最佳答案

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

关于swift - 为什么 NSURL 上的这个可失败初始化器(采用可选字符串)无法编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29058846/

相关文章:

ios - 使用原始类型 + 大小写参数的 Swift Enum 的解决方法?

ios - Swift 中没有输入参数的泛型函数?

c++ - c++ 11中函数指针 vector 的初始化列表

c++ - 如何从类/构造函数实际初始化对象的二维 vector

java - 为具有(模拟的)可选/默认参数的函数编写 Javadoc

ios - 从通用返回类型获取实际类型

ios - 使用 AlertController 强制更新应用程序

c++ - 为什么我得到的 C 程序值是垃圾值?

list - 可选参数的默认值

javascript - 为什么reduce的回调函数有四个参数?