美文网首页
Swift类型

Swift类型

作者: 闲逛的Andrew | 来源:发表于2021-07-05 14:42 被阅读0次

    Swift设计为类型安全语言,类型之间不可以隐性转换,必须显性转换。
    Swift分常量与变量,常量声明用let, 而变量声明使用var。
    基本类型Swift与以往的语言并无区别。

    但对于变量的缺省,Swift有所不同。
    主要体现在一个普通声明的Swift变量没有初始化过,那么在解释或者编译时,会给出“变量在使用前没有初始化过”的错误。

    var temp: Int // 会显示 Variable 'temp1' used before being initialized
    

    而如果是optional的变量,则会在未初始化时,给予nil的初始值。optional变量的写法是:var temp: String?。同时,为声明为optional的变量,无法赋值为nil。

    var temp: Int?
    print(temp) // 会显示nil
    

    基于optional变量,swift给出了条件绑定和强制展开两个特性。
    为什么要给出这两个特性,首先optional变量声明初始化后,如果未设定初始值,则该变量值为nil,如果设定了初始值,则变量值为optional(value)。那么可以认为该变量是一个optional类型的对象。那么要使用对象中的值,则需要展开该对象,把其中的值拿出来,那么就有了条件绑定和强制展开。
    条件绑定,给予变量赋值时测试,如果赋值右值为nil或者false则条件绑定失败,否则成功。

    if let temp = Int("4") {
        print(temp) // 会到这里显示4
    } else {
        print(“failed”
    }
    
    if let temp = Int("Hello") {
        print(“success”)
    } else {
        print("hi") // 会到这里,显示hi, temp的作用域不到else中。
    }
    

    强制展开,当开发者知道optional变量肯定有非nil值时,则在赋值时给右值变量后加惊叹号。

    var temp: String? = "4"
    print(temp) // Optional("4")
    print(temp!) // 4
    

    那么如果强制展开时遇到nil时,则会产生一个运行时错误。

    error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).
    The process has been left at the point where it was interrupted, use "thread return -x" to return to the state before expression evaluation.
    
    

    相关文章

      网友评论

          本文标题:Swift类型

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