您的位置:首页 > 移动开发 > Swift

Swift 中的变量(var let , Optional)

2016-06-12 13:12 477 查看
相对于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 x: (String, Int, Double) = ("Hello", 5, 0.9)

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 ?? " "
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息