Swift 基本语法02-"let"和"var"

96
宫城良田__
2017.05.08 23:25* 字数 273
一个iOS开发初级菜鸡.png

Swift 基本语法01-Swift简介
Swift 基本语法03-"if let"和"guard let"
Swift 基本语法04-"switch"和"for"
Swift 基本语法05-"String"
Swift 基本语法06-数组和字典

1.let(常量)和var(变量)可选项的默认值

1.1 let(常量)的可选项没有默认值

1> 常量在使用之前要被初始化

let y: Int?
// Constant 'y' used before being initialized
print(y)

2> 给常量设置数值,初始化的工作只能做一次

let y: Int?
y = 20
// Immutable value 'y' may only be initialized once
// y = 30   不能继续修改(因为只能修改一次)
print(y)
1.2 var(变量)的可选项的默认值为nil

1> 如果变量的值没有改变,只会警告我们把var改变为let

// Variable 'x' was never mutated; consider changing to 'let' constant
var x: Int?
print(x)

2> 给变量赋值,值可以随意改变

// Variable 'x' was never mutated; consider changing to 'let' constant
var x: Int?
x = 10  // Optional(10)
x = 100 // Optional(100)
print(x)

2. 简单的分支和三目的写法

2.1 分支
/**
 * 1.条件不需要括号'()'了
 * 2.语句必须有括号'()'(else{ },OC类似的可以这样写->if x > 5 print("大于5"))
 */
let x = 10
if x > 5 {
    print("大于5")    // 大于5
} else {
    perror("小于5")   // ViewController.swift:31:13: Will never be executed
}
2.2 三目
let x = 10

x > 5 ? print("大于5") : print("小于5") // 大于5
x > 5 ? print("大于5") : ()            // '()'表示空执行(什么也不执行)

3. 问号操作符号

3.1 可选项的判断

1> 如果指定类型是可选的,那么可选项在参与运算时,必须要进行强行解包才能参与运算

let x: Int? = 10
let y: Int? = 100

// ViewController.swift:24:19: Value of optional type 'Int?' not unwrapped; did you mean to use '!' or '?'?
// print(x + y) // 因为'x'和'y'都是可选的,可选项参与计算时,必须进行解包后才能参与计算
print(x! + y!)  // 110

2> 可选项作为参数传递时需要注意的

override func viewDidLoad() {
    super.viewDidLoad()
    
    // 因为'x'和'y'都是可选的,因此这里'y'可以传`nil`
    demo(x: 10, y: nil)
}

func demo(x: Int?, y: Int?) {

    // 程序会报错,崩溃到此行
    print(x! + y!)  // fatal error: unexpectedly found nil while unwrapping an Optional value
}

3> 简单的三目??

override func viewDidLoad() {
    super.viewDidLoad()
    
    // 因为'x'和'y'都是可选的,因此这里'y'可以传`nil`
    demo(x: 10, y: nil)
}

func demo(x: Int?, y: Int?) {

    /**
     * '??'是一个简单的三目运算符
     * 如果有值,使用值
     * 如果没有值,使用'??'后面的值代替
     */
    print((x ?? 0) + (y ?? 0))  // 10
}

4> 关于??的优先级

override func viewDidLoad() {
    super.viewDidLoad()
    
    let name: String? = "老王"
    print((name ?? "") + "你好")  // 老王你好
    
    let name: String? = nil
    print((name ?? "") + "你好")  // 你好
    
    /**
     * 由此可见`??`的优先级最低
     * 如果'name'有值,最后执行'??'运算符,因此输出结果为"老王"
     * 使用的时候,建议用'( )'将'??'运算符相关的包装起来,防止出错
     */
    let name: String? = "老王"
    print(name ?? "" + "你好")    // 老王
}
Swift
Web note ad 1