zoukankan      html  css  js  c++  java
  • Swift学习笔记(语法篇)-- Optional类型探索

    可选值类型的概念不存在c和c++中,这是Swift语言特有的数据类型。可选类型用在考虑一个值可能为null的情况。

    一:可选类型的创建

    可选类型为在一般类型后面加?,表示相对应类型的可选类型,如Int?表示 整型可选类型,Double?表示 浮点可选类型, String?表示 字符串可选类型

    var serverResponseCode: Int? = 404
    
    serverResponseCode = nil
    

    可选类型的变量可以被设置为nil,但是不能将nil赋值给非可选类型

    Swift中的nil与Objective-C中的nil不同。在Objective-C中,nil是一个指向空对象的指针。但是在Swift中,nil不是一个指针,而是一个确切的代表缺失的值,在Swift中,不只有类的实例能设置为nil,任何相关的值类型也可以设置为nil

    二:解析拆箱可选类型

    如果一个值被设定为可选类型,在用到它的时候,就需要加以判断这个值是否确实有可用的值,如果有,则取出相应的值,如果没有,则按nil来处理。此过程可以理解为可选类型的拆箱解析操作。

    if serverResponseCode != nil {
       var serverCode =  serverResponseCode!        
    }
    

    用变量名后面加!号的方法,进行对可选类型的取值操作,但是在进行!符号取值之前,一定要通过判断当前可选类型不等于nil后再进行取值,否则对nil进行!取值操作会触发运行时错误

    还可以通过可选类型值绑定进行取值操作,安全方便,苹果官方推荐用法:

    if let serverCode = serverResponseCode {
       print("server code is (serverCode)")  
    } else {
       print("server code is nil")  
    }
    

    这段代码可以解释为这样:如果可选类型变量serverResponseCode包含一个确切的值,设置一个新的常量serverCode,并且将可选类型变量里的值赋给这个常量,然后在if 条件为true的分支里就能直接用这个常量

    三: 隐式解析可选类型

    声明:

    let possibleString: String! 
    
    print(possibleString)  //在没有对隐式可选类型赋值,而直接读取,会触发运行时错误
    
    possibleString = "An implicitly unwrapped optional string"
    
    print(possibleString) //第一次赋值后直接当做String类型用,而不用再对这个变量进行解析
    

    隐式解析可选类型,在系统处理中,任然是可选类型,只不过在每次使用变量的时候,系统会默认进行!解析操作。所以,隐式解析可选类型,适合那些只要第一次赋值,以后每次使用都确保有值的情况。否则,对没有值的变量进行使用,等同于对nil进行!解析操作,会触发运行时错误

    四: 可选类型双重运算符

    let defaultColorName = "red"
    var userDefinedColorName: String?
    
    var colorNameToUse = userDefinedColorName ??  defaultColorName  //colorNameToUse的值是"red"
    
    userDefinedColorName = "green"
    
    colorNameToUse = userDefinedColorName ??  defaultColorName //colorNameToUse的值是"green"
    

    在用可选类型进行赋值时,可以用 ?? 问号来提供一个备用值,当可选类型没有值,也就是等于nil的时候,就用这个备用值进行赋值操作

  • 相关阅读:
    C# 实现 Snowflake算法生成唯一性Id
    kafka可视化客户端工具(Kafka Tool)的基本使用(转)
    docker 安装kafka
    Model类代码生成器
    使用docker 部署rabbitmq 镜像
    Vue 增删改查 demo
    git 提交代码到库
    Android ble蓝牙问题
    mac 配置 ssh 到git (Could not resolve hostname github.com, Failed to connect to github.com port 443 Operation timed out)
    okhttp
  • 原文地址:https://www.cnblogs.com/csdnmc/p/6640468.html
Copyright © 2011-2022 走看看