Swift: 避免 C 样式的循环


作者:Thomas Hanning 原文链接

C样式的循环将会在 Swift 3 中被移除。一开始看到似乎有点奇怪,但是 Swift 提供了更好的循环结构。

C样式的循环

让我们先来看看C样式的循环:

let programmingLanguages = ["Swift","Objective-C","Java"]

for var i = 0; i < programmingLanguages.count; i++ {
    print("index: \(i), value: \(programmingLanguages[i])")
}

这段代码运行没问题,但是它既不好用也不够 “swifty”。实际上,它不太容易学习和记忆。

For-in 循环

for-in 循环提供了足够多功能来实现同样的目的。不过我们还是先来看看一个简单的版本:

for language in programmingLanguages {
    print("value: \(language)")
}

同样可以运行,但是有个小问题:你没法访问索引。某些情况下这已经足够了,但是有些时候你确实需要索引。没问题,我们可以通过使用 元祖enumerate() 方法来解决:

for (index,language) in programmingLanguages.enumerate() {
    print("index: \(index), value: \(language)")
}

我们要的都有了。而且我觉得这个比C样式的循环更加易读。

还有字典呢?也很简单。

let plattformLanguages = ["Android":"Java","iOS":"Swift"]

for (key,value) in plattformLanguages {
    print("key: \(key), value:\(value)")
}

这里我们甚至不需要访问字典里面的函数。直接使用 for-in元祖 来实现。

Swift 3

当然你仍然可以去争论在 Swift 3 中移除C样式的循环是否是一个好的想法。一方面你需要重写现有的代码而且只有 for-in 一个选择,但是另一方面这会强制开发者使用一个循环样式,所以我认为这是不错的改变。

你呢?你觉得在 Swift 3 中移除C样式的循环是一个好的想法吗?欢迎在下面评论!