前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift中? 、! 和 ??

Swift中? 、! 和 ??

作者头像
赵哥窟
发布2020-08-17 16:03:14
1.5K0
发布2020-08-17 16:03:14
举报
文章被收录于专栏:日常技术分享日常技术分享

Swift中是可以声明一个没有初始值的属性, Swift中引入了可选类型(Optional)来解决这一问题。它的定义是通过在类型声明后加一个 ? 操作符完成的。 例如: var name: String?

Optional其实是个enum,里面有None和Some两种类型。其实所谓的nil就是Optional.None , 非nil就是Optional.Some, 然后会通过Some(T)包装(wrap)原始值,这也是为什么在使用Optional的时候要拆包(从enum里取出来原始值)的原因。这里是enum Optional的定义

代码语言:javascript
复制
enum Optional<T> : LogicValue, Reflectable {  
        case None  
        case Some(T)  
        init()  
        init(_ some: T)  
        /// Allow use in a Boolean context.  
        func getLogicValue() -> Bool  
       /// Haskell's fmap, which was mis-named  
        func map<U>(f: (T) -> U) -> U?  
        func getMirror() -> Mirror 
}
? 和 ! 使用

一旦声明为Optional的,如果不显式的赋值就会有个默认值nil。判断一个Optional的值是否有值,可以用if来判断:

代码语言:javascript
复制
if name { 
// 有值再操作
}

在使用Optional值的时候需要在具体的操作,比如调用方法、属性、下标索引等前面需要加上一个?,如果是nil值,也就是Optional.None,会跳过后面的操作不执行,如果有值,就是Optional.Some,可能就会拆包(unwrap),然后对拆包后的值执行后面的操作,来保证执行这个操作的安全性。

? 的使用场景:

1.声明Optional值变量 2.用在对Optional值操作中,用来判断是否能响应后面的操作 3.使用 as? 向下转型

下面声明一个对象Person为可选类型,或者一个可选的String

代码语言:javascript
复制
var person:Person?
var str:String?
var num:NSNumber!

可选类型 可以不用初始化,如果不是可选类型,必须在init下进行初始化。保证在调用的时候不是nil

可选类型在调用的时候必须加上?或者!,声明的时候用的!的可以不加

代码语言:javascript
复制
 let str:String! = "Hello"
        let greeting = "World!"
        if str != nil {
          let message = str + " " + greeting
          print(message)
}

声明的时候用的?需要加上!

代码语言:javascript
复制
let str:String? = "Hello"
        let greeting = "World!"
        if str != nil {
            let message = str! + " " + greeting
            print(message)
 }

??是取两个中不为nil的

代码语言:javascript
复制
let helloStr:String? = nil
let x = helloStr ?? "Hello World!"
print(x)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ? 和 ! 使用
  • ? 的使用场景:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档