美文网首页
iOS开发之Swift3.0初探_控制流(Control Flo

iOS开发之Swift3.0初探_控制流(Control Flo

作者: 1c7d21358574 | 来源:发表于2016-11-23 15:20 被阅读25次

大体上和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


我们可以使用iflet来处理值缺失的情况。这些值可由可选值来代表,一个可选的值表明可以为空(_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()

相关文章

网友评论

      本文标题:iOS开发之Swift3.0初探_控制流(Control Flo

      本文链接:https://www.haomeiwen.com/subject/cwzmpttx.html