//: Playground - noun: a place where people can play import UIKit /* Swift中nil代表是是另外一种类型, 而不像OC那样, 任何对象都能赋值为nil, Swift中的nil就是空, 什么都没有的意思, 当一个变量有可能存在空值的时候, 必须显式的申明为可选型, 否则不能直接赋值为nil, 因为无论是Int, String还是其他的类型, 都和nil不是同一种类型, 道理就跟将一个Int类型赋值给一个String类型的变量一样, 是行不通的! 所以, 要想一个变量可以赋值为nil, 就必须显式申明为可选型, 也就是在类型后面加上"?" 下面直接代码演示... */ // let errorCode = nil 这行代码会报错, 因为Swift不能自动识别这个到底是什么类型的可选型 // let errorCode: String = nil 这行代码会报错, 因为nil和errorCode不是同一种类型(String) // 这样才是正确的代码 var errorCode: String? = nil; // 一个可选型可以复制一个同类型的非可选型(或可选型)的值, 例如这里404是一个String类型, 而不是String?类型 errorCode = "404" // 但是不能直接将一个可选值赋值给同类非可选型变量 // let errorCode2: String = errorCode // 这行代码会报错 // 要想将一个可选值赋值给非可选型变量, 就需要对可选值进行解包操作 // 1.强制解包, 存在一定的风险, 例如errorCode为nil的时候, 会出现异常, 一般只使用在确定一个可选值一定为非nil的时候使用 var errorCode2: String = errorCode! // 2.if-let解包 if let errorCode = errorCode { // 只有errorCode非nil, 才会执行 errorCode2 = errorCode; } else { // 否则就执行这里 print("errorCode为nil") } // 另外还可以一次对多个可选值进行解包 let errorMessage: String? = "Not Found" if let errorCode = errorCode, errorMessage = errorMessage { print("Error Code is \(errorCode), Error Message is \(errorMessage).") }
时间: 2024-09-27 18:20:34