Swift中 !和 ?

网上有关“Swift中 !和 ?”话题很是火热,小编也是针对Swift中 !和 ?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。

相信大家在学习和使用Swift的时候,肯定会被 ! 和 ? 搞疯过, 纠结这两个符号到底是个什么鬼 ?鬼知道什么时候使用 ! ,什么时候使用 ?

下面就说一下 ! 和 ? 区别以及该怎么使用!

? 和 ! 其实分别是Swift语言中对一种可选类型( Optional) 操作的语法糖。

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

例如: var name: String?

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

既然这样, 那对于 var name: String? 该怎样去理解这句语法呢?

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

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

? 的使用场景:

1.声明 Optional 值变量

2.用在对 Optional 值操作中,用来判断是否能响应后面的操作

3.使用 as? 向下转型(Downcast)

上面提到 Optional 值需要拆包(unwrap)后才能得到原来值,然后才能对其操作,那怎么来拆包呢?

拆包有两种方法:

其实, 还有一种叫隐式拆包(Implicitly Unwrapped Optionals),比如 对于会在viewDidLoad进行初始化的变量,可以直接定义为 var str :String! 等于说你每次对这种类型的值操作时,都会自动在操作前补上一个 ! 进行拆包,然后在执行后面的操作,当然如果该值是nil,会报错crash掉。

举个很浅显的栗子:

! 的使用场景:

1.强制对 Optional 值进行拆包(unwrap)

2.声明隐式拆包变量,一般用于类中的属性

其实 ! 和 ? 的问题是很坑的,不要看它仅仅是两个符号,因为只要有一个不小心,不注意,你会发现项目运行起来,会莫名的crash掉了,关键是Debug模式也不是很方便定位错误类型。 自己整理一下关于 可选类型的相关使用,一是记录和巩固所学,而是希望会对大家有所帮助。 本文可能会有错误和不妥之处,还望提出,我会及时改正。

关于“Swift中 !和 ?”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!

本文来自作者[幻柏]投稿,不代表鸡脖创新立场,如若转载,请注明出处:https://jcjybjb.com/jb/3250.html

(13)

文章推荐

  • 郑州南三环地铁站有几个出口?

    导读:郑州南三环地铁站一共有A、B、C、D,4个出入口,其中B出口的地标为黄河科技学院附属医院。正文: A 街道:紫荆山南路(南)、南三环(东) 地标:暂无信息 B 街道:紫荆山南路(南)、南三环(西) 地

    2025年08月08日
    13
  • DHC的卸妆油需要多少钱

    DHC深层卸妆油(DHCDEEPCLEANSINGOIL)200mL深入毛孔、充分去除污垢的植物性卸妆油以优质橄榄精华油为主要成分的DHC深层卸妆油虽是油类,但又具有水溶性,可用清水完全洗净,是一种划时代的卸妆品。可迅速溶解难以卸除的彩妆,并渗入毛孔内部,使堆积的不洁皮脂、老

    2025年09月08日
    9
  • 暖心姐姐真话哥真实身份

    网红"暖心姐姐"和"真话哥"的真实身份是河北大学新闻传播学院教授乔传立和海南大学人文传播学院教授余炳财。2022年初,乔传立和余炳财因发布侮辱性、攻击性内容,传播范围很广,账号被平台封禁。2023年9月25日,刘学州养父母家外祖父母起诉曾网暴刘学州造成恶劣影响的自媒体大V"真话哥"与"暖心姐姐",希

    2025年10月22日
    10
  • 计量经济学就业方向

    你好,计量经济学是一个方法。。他是很多专业的方法论。。貌似没有计量经济学的专业哈。。但是能区别你是学经济的就是他了,那些什么供求价格的关系,老百姓都知道。。但是你会用建立数学模型的方法分析才是别人不会的。。所以计量经济学是很有用的。。、在很多经济领域有重要的低位,很多工作要用的。。一:经济预测、分

    2025年10月30日
    12
  • 实测教程”手机十三张怎么拿好牌”开挂(透视)辅助教程

     您好,“微乐游戏辅助器免费开挂微信这款游戏可以开挂的,确实是有挂的,通过咨询客服安装软件网上科普有关“微乐游戏辅助器免费开挂微信”详细分享装挂步骤”话题很是火热,小编也是针对小程序雀神广东麻将挂软件开挂有用吗寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现

    2025年11月02日
    11
  • 实测教程”微乐湖南麻将万能开挂器通用版”附开挂脚本详细步骤

    ˂pstyle="font-size:16px;font-family:-apple-system,BlinkMacSystemFont,"vertical-align:baseline;font-weight:400;color:#1A1A1A;font-style:normal;

    2025年11月06日
    8
  • 教程开挂辅助“微信小程序微乐麻将开挂方法”其实确实有挂

    亲,微乐内蒙麻将小程序必赢神器免费安装这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙伴就怀疑这款游戏是不是有挂,实际上这款游戏确实是有挂的通过添加客服微:本司针对手游进行匹配,选择我们的四大理由:

    2025年11月07日
    7
  • 实测教程”手机麻将有开挂神器吗”确实可以开挂

     >>>您好:微信小程序微乐有挂吗,软件加微信【】确实是有挂的,很多玩家在微信小程序微乐有挂吗这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙伴就怀疑微信小程序微乐有挂吗这款游戏是不是有挂,实际上这款游戏确实是有挂的,添加客服

    2025年11月07日
    7
  • 实测教程”微乐陕西三带开挂”开挂(透视)辅助教程

     您好,“微乐内蒙麻将小程序怎么提高胜率这款游戏可以开挂的,确实是有挂的,通过咨询客服安装软件网上科普有关“微乐内蒙麻将小程序怎么提高胜率”详细分享装挂步骤”话题很是火热,小编也是针对小程序雀神广东麻将挂软件开挂有用吗寻找了一些与之相关的一些信息进行分析,如果能碰巧

    2025年11月08日
    7
  • 教程开挂辅助“雀神麻将小程序有没有开挂神器”开挂详细教程

    ˂pstyle="font-size:16px;font-family:-apple-system,BlinkMacSystemFont,"font-weight:400;color:#1a1a1a;font-style:normal;background-color:#ffffff

    2025年11月09日
    10

发表回复

本站作者后才能评论

评论列表(4条)

  • 幻柏
    幻柏 2025年09月09日

    我是鸡脖创新的签约作者“幻柏”!

  • 幻柏
    幻柏 2025年09月09日

    希望本篇文章《Swift中 !和 ?》能对你有所帮助!

  • 幻柏
    幻柏 2025年09月09日

    本站[鸡脖创新]内容主要涵盖:生活百科,小常识,生活小窍门,知识分享

  • 幻柏
    幻柏 2025年09月09日

    本文概览:网上有关“Swift中 !和 ?”话题很是火热,小编也是针对Swift中 !和 ?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。 相信...

    联系我们

    邮件:鸡脖创新@sina.com

    工作时间:周一至周五,9:30-18:30,节假日休息

    关注我们