zoukankan      html  css  js  c++  java
  • 重新认识Swift中的可选型(Swift2.1)

    //: Playground - noun: a place where people can play
    
    import UIKit
    
    /*
    Swift中nil代表是是另外一种类型, 而不像OC那样, 任何对象都能赋值为nil,
    Swift中的nil就是空, 什么都没有的意思, 当一个变量有可能存在空值的时候, 必须显式的申明为可选型,
    否则不能直接赋值为nil, 因为无论是Int, String还是其他的类型, 都和nil不是同一种类型,
    道理就跟将一个Int类型赋值给一个String类型的变量一样, 是行不通的!
    所以, 要想一个变量可以赋值为nil, 就必须显式申明为可选型, 也就是在类型后面加上"?"
    下面直接代码演示...
    */
    
    // let errorCode = nil  这行代码会报错, 因为Swift不能自动识别这个到底是什么类型的可选型
    // let errorCode: String = nil  这行代码会报错, 因为nil和errorCode不是同一种类型(String)
    
    // 这样才是正确的代码
    var errorCode: String? = nil;
    
    // 一个可选型可以复制一个同类型的非可选型(或可选型)的值, 例如这里404是一个String类型, 而不是String?类型
    errorCode = "404"
    // 但是不能直接将一个可选值赋值给同类非可选型变量
    // let errorCode2: String = errorCode   // 这行代码会报错
    // 要想将一个可选值赋值给非可选型变量, 就需要对可选值进行解包操作
    
    // 1.强制解包, 存在一定的风险, 例如errorCode为nil的时候, 会出现异常, 一般只使用在确定一个可选值一定为非nil的时候使用
    var errorCode2: String = errorCode!
    // 2.if-let解包
    if let errorCode = errorCode {      // 只有errorCode非nil, 才会执行
        errorCode2 = errorCode;
    } else {                            // 否则就执行这里
        print("errorCode为nil")
    }
    
    // 另外还可以一次对多个可选值进行解包
    let errorMessage: String? = "Not Found"
    if let errorCode = errorCode, errorMessage = errorMessage {
        print("Error Code is (errorCode), Error Message is (errorMessage).")
    }
    

      

  • 相关阅读:
    「Luogu」2831愤怒的小鸟 (DFS+dp)
    LeetCode习题集
    递归的时间复杂度你真的懂吗?不是所有的二分递归都是logn级别
    [数据结构篇]谈一谈优先队列吧!
    论文爱好者(我不是)的福利
    Python 读微博留言进行情感分析(文本分类)
    python 多进程中的p.apply_async()
    记录本科论文开题报告修改过程
    KMP字符串匹配算法
    Pandas Timedelta
  • 原文地址:https://www.cnblogs.com/Rinpe/p/5464680.html
Copyright © 2011-2022 走看看