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

      

  • 相关阅读:
    机器学习 -- 用户画像
    机器学习 -- 分类
    机器学习 -- 聚类
    机器学习 -- 回归
    数据分析 -- 流程
    Nginx + Tomcat7 + redis session一致性问题
    机器学习 -- 信息论
    机器学习 -- 统计与分布
    ElasticSearch 学习一: 基本命令
    问题17:如何将多个小字符串拼接成一个大的字符串
  • 原文地址:https://www.cnblogs.com/Rinpe/p/5464680.html
Copyright © 2011-2022 走看看