Swift 中的可选型

作者: 小伟伟 | 来源:发表于2015-03-05 17:49 被阅读499次
什么是可选型(Optional)

先从一个例子看起

var age: Int = 35
var height:Int = 180

上面定义了两个变量,都是Int型,数值分别为35180,但是不能给这两个变量赋值nil。这样就需要可选型了(Optional)。
可选型其实是枚举类型(enum)

enum Optional : NilLiteralConvertible{
    case None
    case Some(T)
}

Optional<Int>的值是nil或者Int

在下面的代码中声明了两个可选型变量。?表示是一个可选型

var age:Int? = nil
var height:Int? = 180

以height为例:与下面的代码是等效的。
var height:Optional<Int> = Optional <Int>(180)

什么时候使用? !

假定有一个基于UIKit 的iPhone App,在view controller中有一些代码可以把新的view controller 弄到前一个view controller上面并把它呈现在屏幕上,通过navigation controller把它push出来。

正如你知道的那样,每一个ViewController的实例都有一个property叫做navigationController。但是如果你创建的是基于navigation controller的程序,那么你的master view controller中的该property已经是被自动的设置好了。如果你使用的是single app 模板创建的程序,那么该property并没有被自动的设置,所以你的app的默认的view controller并没有任何东西存储在他名为navigationControllerproperty中。

那么该情况下,使用可选型就比较合适了,
先看一下UIViewController的定义

var navigationController:UINavigationController? {get}

如果你确定知道view controllernavigation controller不会为nil,那么你可以通过!来强制解包

controller.navigationController!.pushViewController(myViewController, animated:true)

!: 当把!放到一个变量后面,你通知编译器你根本不关心这个类型是可选型,你明确知道执行到这一句的时候,这个变量一定是有值,不会是nil。(当navigationController不知道为什么是nil的时候,执行就会crash,所以当你百分之百确定的时候使用!

当你不是很明确的时候,就使用?

controller.navigationController?.pushViewController(myViewController, animated:true)

? 当吧?放到一个变量后面的时候,你其实不是很明确是否改变量是nil还是有值的。所以上面的意思就是:当navigationController有值的时候,就接着执行后面,否则就相当于nil。等价于

if(controller.navigationController){
    controller.navigationController.pushViewController(myViewController, animated:true)
}

但是问题来了,我想当他是nil的时候执行别的代码的时候。if let就应运而生了
if let :针对上面的疑问,可以这么写

if let nav = controller.navigationController{
    nav.pushViewController(myViewController,animated:true)
} else {
    随便干点啥
}

相关文章

  • swift-可选型(Optional)

    可选型作为swift语言中一大亮点,也是非常重要的一个概念,为此我们要学好swift,就要把可选型学好。 什么是可...

  • iOS 可选型与泛型

    可选型 在swift中,可选型是为了表达当一个变量值为空的情况。当一个变量值为空时,它就是nil。在swift中,...

  • Swift 中的可选型

    什么是可选型(Optional) 先从一个例子看起 上面定义了两个变量,都是Int型,数值分别为35和180,但是...

  • 关于iOS架构一个项目需要考虑什么

    整理一下需要构建iOS的项目过程吧 1.技术选型iOS下技术选型OC SWIFT 看个人习惯吧独立开发swift吧...

  • TCLMOVE 技术选型

    TCLMOVE 技术选型 Swift Storyboard RxSwfit Rleam R.Swfit Moya+...

  • Swift可选型(optional)各种用法示例

    Swift可选型(optional)各种用法示例原文:optionals the optionals if let...

  • Swift 中的枚举及可选型

    枚举及可选型是 Swift 中两个很重要的概念,前者与 Objective-C 中的概念大不相同,后者完全不存在,...

  • swift学习:可选型(Optional)

    对于刚接触swift的同学来说,可选型是一个比较陌生的概念。下面对可选型做一个简单清晰的分析 可选型其实是一个枚举...

  • Swift可选性链式解包中的问题

    在Swift中的可选型是支持链式解包的; 可是下面的代码中如果用链式解包会不成功: 但是用括号把 try? JSO...

  • [Swift] 可选型

    变量或常量在某些情况下可能表示的是未被赋值的情况,若直接不对某一类型的变量赋值,会提示该变量未初始化不可用。这时就...

网友评论

    本文标题:Swift 中的可选型

    本文链接:https://www.haomeiwen.com/subject/qynmxttx.html