美文网首页
Swift学习笔记(01)——Optional(可选型)

Swift学习笔记(01)——Optional(可选型)

作者: 兰帕德 | 来源:发表于2017-04-27 14:16 被阅读0次

    可选(Optional)类型是Swift的显著特点之一,用于处理值缺失的情况,提高安全性。Optional表示 “这里有一个值,并且等于XXX” 或者 “这里没有值”。Swift定义“?”为命名类型Optional的缩写。

    //Optional的定义
    var optionalString: String? = "Hello, World!"
    var optionalString: Optional<String> = "Hello, World!"
    

    String 和 String? 不是一个类型,String?是String的可选类型,既可存放String,又可存放String?。

    var age: Int = nil
    //直接赋值为nil是报错的
    

    Swift中nil严格区分于其他类,Nil是一个单独的类。Optional可以让我们在具体的类和nil之间进行选择,此为可选型名字的由来。

    //Optional的使用
    var Str:String? = "World"
    print("Hello, " + str)
    //由于errorCode可能为nil  所以此处报错
    
    强制解包(forced unwrapping)
    //利用符号“!”进行强制解包
    var str: String? = "World!"
    "Hello, " + str! 
    //强制解包需要确定可选类型包含值,否则会报错
    
    if str != nil {
        print("Hello " + str!)
    }
    else {
        print("str 值为 nil")
    }
    
    自动解包

    在声明Optional变量的时候,使用“!”替换“?”,这样可选型变量在使用时,就不需要再添加“!”来获取值,它会自动进行解析。示例如下:

    var str: String! = "Hello, World!"
    if str != nil {
        print(str)
    }
    else {
        print("str 值为 nil")
    }
    
    可选绑定(optional binding)

    可选绑定先判断可选类型是否包含值,如果包含值,就把值赋给一个临时常量(if let)或变量(if var)。示例如下:

    //if let 解包(if var 也可,通常使用if let)
    var str: String? = "World"
    if let unwrapedStr = str {
        print("Hello, " + unwrapedStr)
    }
    else {
    }
    

    简便起见,可以使用相同的变量名,不会造成冲突。例如:

    var str: String? = "World!"
    if let str = str {
        print("Hello, " + str)
    }
    else {
    }
    
    Optional Chaining
    var str: String? = "Hello, World!"
    var upperStr = str?.uppercased()
    //此处 ? 是尝试解包,upperStr类型仍为String? ,即使str的值是nil也不会报错。
    if let str = str?.uppercased(){
        print(str)
    }
    
    Nil Coalesce
    var str: String? = "Hello, World!"
    let str2 : String
    //此处没有赋初值,若中间有操作,则会报错
    if let str = str {
        str2 = str
    }
    else{
        str = "nil"
    }
    //三目预算符写法
    let str2 = str == nil ? "str值为nil" : str
    //与上面的三目运算符逻辑等价  但要简洁
    let str2 = str ?? "str值为nil" 
    

    相关文章

      网友评论

          本文标题:Swift学习笔记(01)——Optional(可选型)

          本文链接:https://www.haomeiwen.com/subject/crqizttx.html