Swift 3 对隐式解包的改进

struct Person {
    let firstName: String
    let lastName: String

    init!(firstName: String, lastName: String) {
        guard !firstName.isEmpty && !lastName.isEmpty else {
            return nil
        }
        self.firstName = firstName
        self.lastName = lastName
    }
}

swift 2.x

let nilPerson = Person(firstName: "", lastName: "Mathias")
nilPerson.firstName // `nilPerson ` 是 `Person!`类型,值为nil,程序崩溃!

let matt = Person(firstName: "Matt", lastName: "Mathias")
matt.firstName // `matt` 是 `Person!`类型
let anotherMatt = matt // `anotherMatt`  也是 `Person!`类型

swift 3

let nilPerson = Person(firstName: "", lastName: "Mathias")
nilPerson?.firstName// `nilPerson ` 是 `Person?`类型,可选链,安全!

let matt = Person(firstName: "Matt", lastName: "Mathias")
matt?.firstName // `matt` 是 `Person?`类型
let anotherMatt = matt // `anotherMatt`  也是 `Person?`类型

let runningWithScissors: Person! = Person(firstName: "Edward", lastName: "") // 显式声明为` Person!`类型
let safeAgain = runningWithScissors // `safeAgain `  是 `Person?`类型
  • 依靠编译器对类型进行推断
  • 总结:引用OptionalImplicitlyUnwrappedOptional 类型,自己会变成 Optional 类型。

参考资料

WWDC 2016: Increased Safety in Swift 3.0

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容