Swift 基本语法02-"let"和&qu
2017-05-08 本文已影响261人
一位不愿透露姓名的王先生_
一个iOS开发初级菜鸡.png
1.
1.1
1.2
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 ?? "" + "你好") // 老王
}