swift 4.1 可选型optional

前端之家收集整理的这篇文章主要介绍了swift 4.1 可选型optional前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

swift 4.1 可选型optional

标签(空格分隔): swift


可选型 optional ,表示一个值可能为空。但是这个空,在swift中就叫可选型,用关键字nil表示。它既不是0,也不是不存在,它就是nil

要么是它自身的值,要么为nil。nil就是可选型的默认值

简单记录下,就不展开的说了。

0. 申明一个可选项

用: 字符类型+? 必须显示的申明

  1. var errorCode:Int? = 404
  2. var errorMessage:String? = "Not Found!"
  3.  
  4. errorCode = nil
  5.  
  6. print( errorMessage ) // 输出:Optional("Not Found!")

1. 不能隐示的申明

  1. //var errorCode1? = 404 //报错,必须声明类型
  2.  
  3. var errorCode2:Int? = 404 //得像这样,显示的申明一个类型
  4.  
  5. // Int? 和 Int 不是一种类型
  6. let imInt = 405 //Int 型
  7. errorCode = imInt
  8. print(errorCode) //Optional(405)
  9.  
  10. //imInt = errorCode //报错了,把一个可选型赋值给一个Int型,报错。

2. 可选型的解包。

解包就是我得使用它了。确认强制解包用:!

  1. var errorCode3:String? = "404"
  2.  
  3. //"the errorcode is " + errorCode3 // 报错:2种不同的类型不能直接拼装使用。
  4.  
  5. //如果需要使用,就得解包。用强制解包:!
  6. "the errorcode is " + errorCode3! // 打印:the errorcode is 404
  7.  
  8. //用强制解包,是很危险的,如果这个值真的为 nil。然后强制解包,就会报错。
  9.  
  10. var errorCode4:String? = nil
  11. //"the errorcode is " + errorCode4! // 报错了:nil被强制解包报错。

3. 可以用if 判断可选型是否为nil,安全后再用!解包

  1. var errorCode5:String? = "502"
  2. if errorCode5 != nil {
  3. print(errorCode5!) //打印:502
  4. } else {
  5. print("No error!")
  6. }

4. if 联合使用 let 关键字解包,可以不用!了

  1. if let unwrappedErrorCode = errorCode5{
  2. print(unwrappedErrorCode) //打印:502
  3. } else {
  4. print("No error!")
  5. }
  6.  
  7. //也可以用相同的名字:
  8. if let errorCode5 = errorCode5{
  9. print(errorCode5) //打印:502
  10. } else{
  11. print("No error!")
  12. }

5. 使用 if let 解包多个可选型的值。相当于 and 操作

  1. if let errorCode5 = errorCode5,errorMessage = errorMessage{
  2. print("code is \(errorCode5),msg is \(errorMessage)")
  3. //打印:code is 502,msg is Not Found!
  4. }

6. 使用 if let 再加 where 进一步限定

  1. if let errorCode5 = errorCode5,errorMessage = errorMessage where errorCode5 == "502"{
  2. print("code is \(errorCode5),msg is \(errorMessage)")
  3. }
  4. print(errorCode5) // 它自身的值并没有被改变:Optional("502")

7. Optional chaining 链式操作

  1. //解包
  2. var errorMessage2: String? = "Not Found"
  3. if let errorMessage2 = errorMessage2{
  4. print(errorMessage2.uppercaseString) // "NOT FOUND" 全部大写了
  5. }
  6.  
  7. //chaining操作就是可以直接用:
  8.  
  9. if let errorMessage2 = errorMessage2?.uppercaseString{
  10. print(errorMessage2) // "NOT FOUND" 全部大写了
  11. }
  12.  
  13. //也可以直接用 !强制解包,前提是你确定一定不为nil。
  14. let upperMessage2 = errorMessage2!.uppercaseString //"NOT FOUND" 全部大写了

8. 使用 ?? 解包。更加单的三目运算符

  1. let message2 = errorMessage == nil ? "No error" : errorMessage!
  2.  
  3. //等价。如果 errorMessage 解包成功,就把解包解包的值给 message3
  4. let message3 = errorMessage ?? "No error" // "Not Found!"

9 .在元祖里面使用可选型

  1. //errorMessage 设置为可选
  2. var error1:(errorCode:Int,errorMsg:String?) = (404,"Not found!")
  3.  
  4. error1.errorMsg = nil //成功
  5.  
  6. print(error1) //打印:(404,nil)
  7.  
  8. //把整个元祖设置为可选
  9. var error2:(errorCode:Int,errorMsg:String)? = (404,"Not Found!")
  10.  
  11. error2 = nil //成功的
  12.  
  13. print(error2) // 打印:nil

10 .隐士的申明

待续

猜你在找的Swift相关文章