Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 280|回复: 0

[默认分类] 5、swift开发iOS——可选类型

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-6-22 11:19:01 | 显示全部楼层 |阅读模式






    Swift 可选(Optionals)类型
    Swift 的可选(Optional)类型,用于处理值缺失的情况。可选表示"那儿有一个值,并且它等于 x "或者"那儿没有值"。
    Swfit语言定义后缀?作为命名类型Optional的简写,换句话说,以下两种声明是相等的:
    var optionalInteger: Int?
    var optionalInteger: Optional<Int>
    在这两种情况下,变量optionalInteger都是可选整数类型。注意,在类型和?之间没有空格。
    Optional 是一个含有两种情况的枚举,None和Some(T),用来表示可能有或可能没有值。任何类型都可以明确声明为(或者隐式转换)可选类型。当声明一个可选类型的时候,要确保用括号给?操作符一个合适的范围。例如,声明可选整数数组,应该写成(Int[])?;写成Int[]?会报错。
    当你声明一个可选变量或者可选属性的时候没有提供初始值,它的值会默认为nil。
    可选项遵照LogicValue协议,因此可以出现在布尔环境中。在这种情况下,如果可选类型T?包含类型为T的任何值(也就是说它的值是Optional.Some(T)),这个可选类型等于true,反之为false。
    如果一个可选类型的实例包含一个值,你可以用后缀操作符 !来访问这个值,如下所示:
    optionalInteger = 42
    optionalInteger! // 42
    使用操作符!去获取值为nil的可选变量会有运行时错误。
    你可以用可选链接和可选绑定选择性执行可选表达式上的操作。如果值为nil,任何操作都不会执行,也不会有运行报错。
    让我们来详细看下以下实例来了解 Swift 中可选类型的应用:
    import Cocoa


    var myString:String? = nil


    if myString != nil {
         print(myString)
    }else{
         print("字符串为 nil")
    }
    以上程序执行结果为:
    字符串为 nil
    可选类型类似于Objective-C中指针的nil值,但是nil只对类(class)有用,而可选类型对所有的类型都可用,并且更安全。
    强制解析
    当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。这个感叹号表示"我知道这个可选有值,请使用它。"这被称为可选值的强制解析(forced unwrapping)。
    实例如下:
    import Cocoa


    var myString:String?


    myString = "Hello, Swift!"


    if myString != nil {
        print(myString)
    }else{
        print("myString 值为 nil")
    }
    以上程序执行结果为:
    Optional("Hello, Swift!")
    强制解析可选值,使用感叹号(!):
    import Cocoa


    var myString:String?


    myString = "Hello, Swift!"


    if myString != nil {
        // 强制解析
        print( myString! )
    }else{
        print("myString 值为 nil")
    }
    以上程序执行结果为:
    Hello, Swift!
    注意:
    使用!来获取一个不存在的可选值会导致运行时错误。使用!来强制解析值之前,一定要确定可选包含一个非nil的值。
    自动解析
    你可以在声明可选变量时使用感叹号(!)替换问号(?)。这样可选变量在使用时就不需要再加一个感叹号(!)来获取值,它会自动解析。
    实例如下:
    import Cocoa


    var myString:String!


    myString = "Hello, Swift!"


    if myString != nil {
        print(myString)
    }else{
        print("myString 值为 nil")
    }
    以上程序执行结果为:
    Hello, Swift!
    可选绑定
    使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。
    像下面这样在if语句中写一个可选绑定:
    if let constantName = someOptional {
         statements
    }
    让我们来看下一个简单的可选绑定实例:
    import Cocoa


    var myString:String?


    myString = "Hello, Swift!"


    if let yourString = myString {
        print("你的字符串值为 - \(yourString)")
    }else{
        print("你的字符串没有值")
    }
    以上程序执行结果为:
    你的字符串值为 - Hello, Swift!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-19 23:29 , Processed in 0.376789 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表