加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift 可选类型详解 (optionals)

发布时间:2020-12-14 06:35:59 所属栏目:百科 来源:网络整理
导读:可选类型(optionals) 来处理值可能缺失的情况 。 解释说明:对于从oc转swift的同学来讲,其实swift可选是比较容易理解的,可选类型其实对应oc的nil类型比较类似。oc的nil只是针对对象来说的。但是swift的可选类型(?)则是对结构体,枚举,c语言类型,并

可选类型(optionals)来处理值可能缺失的情况 。

解释说明:对于从oc转swift的同学来讲,其实swift可选是比较容易理解的,可选类型其实对应oc的nil类型比较类似。oc的nil只是针对对象来说的。但是swift的可选类型(?)则是对结构体,枚举,c语言类型,并且对象(个人以为是swift里边的所有数据类型)。

直观表示废话不说直接上代码:(代码源于swift2.0 中文翻译)

var serverResponseCode: Int? = 404
// serverResponseCode 包含一个可选的 Int 值 404

serverResponseCode = nil
// serverResponseCode 现在不包含值


serverResponseCode的类型是 Int? 可选类型,意思是这个变量是既可以是Int类型的变量也可以是nil,因此下方可以看到这个变量可以给nil值。之所以我会这么说明的意思是:如果这个变量如果不声明为optionals类型,是不可以赋值为nil的!大家不信的话可以亲自试一试

接下来揭开可选的几种类型:

(1)强制解析:

当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。这个惊叹号表示“我知道这个可选有值,请使用它。”这被称为可选值的强制解析(forced unwrapping)。如下代码解释说明:

if convertedNumber != nil { print("convertedNumber has an integer value of (convertedNumber!).") 

}
// 输出 "convertedNumber has an integer value of 123."

这段代码告诉我们,只有可选类型确定真实有值才可以强制用!解析,如果不信,大家可以尝试赋值nil编译器实不会允许你通过的

(2)可选绑定 :

使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在ifwhile语句中,这条语句不仅可以用来判断可选类型中是否有值,同时可以将可选类型中的值赋给一个常量或者变量。

if let actualNumber = Int(possibleNumber) { print("'(possibleNumber)' has an integer value of (actualNumber)") 
} else { print("'(possibleNumber)' could not be converted to an integer") 

}

可选绑定于控制流语句紧密结合 let actualNumber = Int(possibleNumber),当Int(possibleNumber)为nil的时候这条语句本来是编译不能通过的,当编译不能通过的时候, 这时候进入else分支里

(3)隐式解析可选类型:

这种类型的可选状态被定义为隐式解析可选类型(implicitly unwrapped optionals)。把想要用作可选的类型的后面的问号(String?)改成感叹号(String!)来声明一个隐式解析可选类型。 如下代码:

let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // 需要惊叹号来获取值

let assumedString: String! = "An implicitly unwrapped optional string."

let implicitString: String = assumedString // 不需要感叹号

通过对比可以看出,隐式解析可选类型在get值的时候不需要强制解析,而普通的可选类型却需要强制解析。隐式解析顾名思义就是没有看到解析就执行了解析

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读