Swift类型

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.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 整数 有符号和无符号类型两种,根据有效位又有8 16 32 64的区别,Int、UInt8等,Int是一个语法糖,...
    深圳小码工阅读 473评论 0 0
  • 类型转换 类型转换可以判断实例的类型,也可以将该实例在其所在的类层次中视为其父类或子类的实例。 Swift 中类型...
    赵哥窟阅读 2,376评论 0 0
  • 常量与变量: 因swift是一门强类型语言,因此对类型的区分是非常严格的。这也体现在变量和常量的声明与使用上 sw...
    深圳小码工阅读 679评论 0 0
  • 在编程世界中有一种非常通用的模式,那就是某个操作是否要返回一个有效值。 在 Objective-C 中,对 nil...
    风从虎云从龙118阅读 175评论 0 1
  • 类型转换是一种检查实例类型的方法,或者将该实例视为来自其自身类层次结构中的其他地方的不同超类或子类。Swift中的...
    Joker_King阅读 2,581评论 0 0