相对于C或者OC,Swift在变量方面引入许多新概念。比如区分可变变量和定义和赋值一次,多次使用的 常量。以及值可以为空的 可选类型 optional 变量.
1) 基本变量和常量用法
用let
来声明常量,使用var
来声明变量。一个常量的值,在编译的时候,并不需要有明确的值,但是你只能为它赋值一次。也就是说你可以用常量来表示这样一个值:你只需要决定一次,但是需要使用很多次。
var myVariable = 42
myVariable = 50
let myConstant = 42
let implicitInteger = 70
let implicitDouble = 70.0
let explicitDouble: Double = 70
值永远不会被隐式转换为其他类型。如果你需要把一个值转换成其他类型,请显式转换
let label = "The width is"
let width = 94
let widthLabel = label + String(width)
有一种更简单的把值转换成字符串的方法:把值写到括号中,并且在括号之前写一个反斜杠。例如:
let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples."
let fruitSummary = "I have \(apples + oranges) pieces of fruit."
2)数组和字典
用方括号[]
来创建数组和字典,并使用下标或者键(key)来访问元素
var shoppingList = ["catfish", "water", "tulips", "blue paint"]
shoppingList[1] = "bottle of water"
var occupations = [
"Malcolm": "Captain",
"Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"
创建一个空数组或者字典,使用初始化语法。
let emptyArray = [String]()
let emptyDictionary = [String: Float]()
如果类型信息可以被推断出来,你可以用[]
和[:]
来创建空数组和空字典——就像你声明变量或者给函数传参数的时候一样。
shoppingList = []
occupations = [:]
let (word, number, value) = x // 元组元素命名,这样访问时候可通过名字
print(word) // hello
print(number) // 5
也可以在一开始定义时候就命名
let x: (w: String, i: Int, v: Double) = ("hello", 5, 0.9)
print(x.w)
print(x.i)
3)可选类型Optional
用可选类型(optionals)来处理值可能缺失的情况。实际上,是一个枚举类型:
<span style="font-size:12px;">enum Optional<T> {
case None
case Some(T)
}
let x: String? = nil
//意味着
let x = Optional<String>.None
let x: String? = "Hello"
//意味着
let x = Optional<String>.Some("Hello") </span>
场景举例,一个字符串转整形函数,比如 String2Int() ,有时候可以正常转换,但是遇到 “hello” 这样的字符串转整形,只能是一个空值。
可选类型变量的串联
var display: UILabel?
if let label = display {
if let text = label.text {
let x = text.hashValue
...
}
}
//means
if let x = display?.text?.hashValue {...}
可选类型的缺省操作
let s: String? = ... // 可能为空
if s != nil {
display.text = s
} else {
display.text = " "
}
//可以简单写成
display.text = s ?? " "