大体上和OC差不多,多了个
repeat-while
(相当于do-while
),加了个guard
语句,包裹条件和循环变量括号可以省略,但是语句体的大括号是必须的。
let weightList = [120, 143, 153, 87, 98]
var myWeight = 110
for weight in weightList {
if weight > 100 {
myWeight += 3
} else {
// myWeight ++ 这种写法已经废弃,会报错
myWeight += 1
}
}
print(myWeight)
在if
语句中,条件必须是一个布尔表达式——这意味着像if weight { ... }
这样的代码将报错,而不会隐形地与 0 做对比,必须有明确的Bool
值,Bool
有两个取值:true/false
。
我们可以使用if
和let
来处理值缺失的情况。这些值可由可选值来代表,一个可选的值表明可以为空(_Nullable
)。在类型后面加一个问号(?
)来标记这个变量的值是可选的,加感叹号(!
)表明不为空(_Nonnull
)
var optionalName: String? = "wozyao"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
如果变量的可选值是nil
,条件会判断为false
,大括号中的代码会被跳过。如果不是nil
,会将值解包并赋给let
后面的常量,这样代码块中就可以使用这个值了。
我们也可以使用??
设置默认值来给处理一个为nil
的可选值
let optionalName: String? = nil
let deafaultName: String = "wozyao"
let resultName = "Hi \(optionalName ?? deafaultName)"
switch
支持任意类型的数据以及各种比较操作,switch
后可以不跟()
,可以判断多个条件,以,
分隔,可以不写break
,可以使用fallthrough
进行穿透。
let company = "Baidu"
switch company {
case "Alibaba":
print("Jack Ma.")
case "Google", "Tencent":
print("Pony Ma.")
case let x where x.hasSuffix("du"):
print("Who is \(x)'s boss?")
fallthrough
default:
print("Robin Li.")
}
使用..<
创建的范围不包含上界,如果想包含的话需要使用...
。
var weight = 150
repeat {
weight -= 2
} while weight > 138
// 循环2次,i分别是0和1
for i in 0 ..< 2 {
weight += i
}
print(weight)
guard
语句类似于if
语句,其实不使用guard
也不会对我们写代码有什么大的影响,从下面的代码可以看到,guard
后的布尔表达式如果成立,则跳过代码块,反之,则执行大括号里的代码块。个人觉得相较于if
语句常见的多个代码块,guard
的可读性更高,实现更为精准。可以在开发中多加使用。
func liaomei() -> Void {
let weight = 140
guard weight > 141 else {
print("撩妹去")
return
}
}
liaomei()
网友评论