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).")
    }
    

      

  • 相关阅读:
    LaTeX —— 特殊符号与数学字体
    LaTeX —— 特殊符号与数学字体
    实战caffe多标签分类——汽车品牌与车辆外观(C++接口)[详细实现+数据集]
    家书与家训
    家书与家训
    Handler总结
    (step5.1.3)hdu 1213( How Many Tables——1213)
    JavaScript+XML+VBA导出报表初步构想
    XML学习总结
    JSP 9 大内置对象详解
  • 原文地址:https://www.cnblogs.com/Rinpe/p/5464680.html
Copyright © 2011-2022 走看看