Swift类型

2021-07-05  本文已影响0人  闲逛的Andrew

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.

上一篇下一篇

猜你喜欢

热点阅读