【移动应用开发技术】第八节 可选(Optionals)类型 主标签_第1页
【移动应用开发技术】第八节 可选(Optionals)类型 主标签_第2页
【移动应用开发技术】第八节 可选(Optionals)类型 主标签_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】第八节可选(Optionals)类型主标签

本文来自于疯子们的开源图书你可以在某个值可能缺失的情况下,使用可选类型。可选类型也就是:要么有值,等于x要么就什么都没有注意:可选类型的概念在C和Objective-C当中是不存在。Objective-C当中最相近的东西就是,一个返回对象类型的函数,可以返回nil.nil表示不存在一个有效的对象。但是,这个只适用于对象,对于结构体,基本的C类型,枚举,就不行了。对于这些类型,Objective-C的方法通常返回一个特殊值(比如NSNotFound)表示值的缺失。这种方法假设方法的调用者知道要返回一个特殊值来进行判断。Swift的可选类型可以让你表示任何类型值的缺失,再也不用那些特殊的常量了。这里有个例子。Swift的String类型有个方法toInt,它可以将字符串转成整型。但是,不是每个字符串都可以转换成整型的。比方说,”123“可以转换成数字123,但是"hello,world"就没有明显的整型可以转成的了。下面的例子使用toInt方法,将字符串转成整型:由于toInt方法可能会失败,它返回一个可选类型的Int,而不是单纯的Int。一个可选类型的Int写作Int?,而不是Int.问号表示当前变量是可选类型的,意味着变量可能包含整型值,或者根本什么都没有(但不能包含其他的类型,比如Bool,String.记住,要么Int型,要么什么都没有)。

你可以使用if语言来判断一个可选类型的变量是否包含值。如果它确实包含值,那么就是true.如果它根本没有值,那就是false.一旦你确定该可选类型的变量缺失有值的话,你就可以通过在变量名称后面加上叹号(!)的方式访问潜在的值。叹号很有效的说明了:“我知道这个可选类型确实有值,放心的用去吧”。这个就是所谓的可选类型的强制拆箱。注意:尝试在一个没有值的可选类型上使用!,会引发运行时错误。在使用!强制拆箱一个可选类型之前,一定要确保它有一个非nil值。你可以通过绑定一个可选类型到一个常量或者变量中,不仅可以检测可选类型是否含有值,还可以在之后通过这个临时变量或者常量访问他的值。通过一个操作,就可以在If

和while当中使用绑定来检查可选当中的值,同时也可以将可选的值放到变量或者常量当中。if和while语句在流程控制当中有详细的描述。像下面这样,在if语句当中实现可选类型的绑定:你可以使用绑定代替强制拆箱,重写上面的possibleNumber例子:上面的代码意思就是:如果possibleNumber.toInt返回的可选Int变量包含值的话,就将可选变量的值赋给新的常量actualNumber.如果上面的转换是成功的话,就可以在if语句当中使用actualNumber了。它已经用可选变量的值初始化过了,因此就没必要在使用!了。这个例子只是使用actualNumber来打印一下转换结果。绑定一个可选类型,既可以使用常量,也可以使用变量。如果你想在if语句当中操作actualNumber,你也可以写成ifvaractualNumber,那么可选类型就是作为变量了,而不是常量了。你可以通过给一个可选类型的变量赋予nil,来让他处于没有值的状态:注意:nil

不能用于非可选类型的常量和变量。如果要在你的代码中处理变量或者常量缺失值的情况,一定要将他们声明为恰当的可选类型。如果你在定义可选类型的变量或者常量的时候,没有指定默认值的话,那么系统或自动赋给它nil的。注意:Swift的nil和Objective-C中的nil是不一样的。在Objective-C中,nil是指向一个不存在对象的指针,而在Swift当中,nil不是一个指针,它代表某中类型值的缺失。任意类型的可选类型都可以赋予nil,而不只是对象类型的。

就像上面描述的一样,可选类型表明一个变量或者常量允许没有值。可以使用if语句检查一个可选类型是否有值,如果有值的话,就可以使用绑定将可选类型进行拆箱。有时候,从你的代码结构当中可以清楚的知道一个可选类型一旦服了赋了值,之后总是有值的。在这种情况下,就没有必要每次访问可选类型,都经过检查和拆箱了,因为我们明确的知道它一直都是有值的。我们就上面这种情况的可选类型定义为隐式拆箱的可选类型。在你想将将它变成可选的类型后面,加上叹号(!)而不是问号(?),就可以将它定义为隐式拆箱的可选类型了。当一个可选类型第一次定义之后,可以很明确的知道之后它一定有值的话,隐式拆箱是非常有用的。在Swift中,隐式拆箱的主要作用就是在类的初始化过程中,参考“无主引用和隐式拆箱可选类型属性”隐式拆箱的可选类型其实就是一个普通的可选类型,只不过可以像普通的变量一样使用,不用每次访问的时候都拆箱了。下面的例子展示了一个可选类型的String和一个隐式拆箱的可选类型的String之间的区别:你可以把一个隐式拆箱的可选类型想象成无论什么时候使用它,你都已经授权给他让他自动拆箱了。在声明可选类型的时候,在后面加上叹号(!),这样你就不用每次访问值的时候,都在后面加上叹号(!)了。注意:如果你在访问一个隐式拆箱的时候,它没有值,就会触发一个运行时错误。结果和在一个普通的可选类型后面加上叹号时的效果是一样的。你可以把隐式拆箱看成一个普通的可选类型来检

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论