您的位置:首页 > 移动开发 > Objective-C

Object-C--->Swift之(一)可选类型

2016-01-13 21:41 465 查看

可选和nil的恋情

[code]    先看一个例子吧!
    let str="hello world"
    let num:Int=Int(str)


这两行代码的意思str字符串转换成Int类型,嘿嘿!这不是坑计算机吗?hello world能转换成Int类型的数字吗?很显然不能,而且我们运行都不会通过的!

可是我们把第二行代码换成

[code]   let num:Int?= Int(str)


编译就通过了!就这样可选类型就呼之欲出!

定义:

在任何类型后面紧跟一个?就可以代表可选类型,可选类型的变量可用于处理“值缺失”的情况。

Int类型的变量或常量只能接受Int类型的数据,而Int?可以接受值缺失的状况,也就是能接受值为nil。

[code]     var age:Int=nil  这个显然是错误的
     var age:Int?=nil 这个是可以的


注意:Int?和Int类型并不是相同的类型,程序不能直接把Int?类型的变量或者常量直接拿来当Int类型的变量或常量使用。

强制解析

为了获取可选类型的常量或变量的实际存储值需要用在后面加!进行解析。这个!的含义是:已经知道该可选变量有值了(要是实际里面没有值系统就会崩溃),提取里面的值。这种添加感叹号进行解析的用法叫做强制解析。

[code]    例如:
    let str1:String?="hello"
    let str2:String?=" word"
    let result = str1! + str2!
    print(result)


之前说了使用!的前提是可选变量确实有值了,否则就会崩溃,所以我们需要提前判断可选类型是否有值。所以上面的代码这样写才正规一些:

[code] let str1:String?="hello"
 let str2:String?=" word"
  if str1 != nil && str2 != nil
    {
    let result = str1! + str2!
        print(result)
    }
    else
    {
    print("str1或者str2为nil,不能强制解析")
    }
  }


隐式可选类型

除了在任意已有类型后面添加?来表示可选类型外,可以加!来表示可选类型。

其中Int?和Int! 类型的区别在于:当用Int?表示可选类型的时候必须用!后缀强制解析,而程序用!类型表示可选变量时,无需在后面增添!后缀执行强制解析。Swift会自动执行隐式解析。

[code]   let str1:String!="hello"
   let str2:String!=" word"
    if str1 != nil && str2 != nil
    {
    let result = str1 + str2
        print(result)
    }
    else
    {
    print("str1或者str2为nil,不能强制解析")
    }


最后用一个表清晰展示下可选类型的差异吧!

IntInt?Int!
是否可存储整数
是否接受nil
是否需要强制解析为Int
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: