具有Int-s范围的Init数组,有人可以解释这个单行程吗?

时间:2015-08-27 15:24:37

标签: ios arrays swift

我想用一系列数字初始化一个Int-s数组。例子[0,1,2,3,4,5]。我知道有一些比使用for循环更好的方法,我喜欢这个有效var values: [Int] = (0...4).map() { $0 }的单行程。但我无法理解这里发生了什么。我知道我的范围是0 ... 4。括号中的这个范围是否像闭包一样? map()函数有什么作用?我在参考文献中找不到它。而0美元是我无法理解的。有人能解释一下这里发生了什么吗?

var values: [Int] = (0...4).map() { $0 }
// result: [0, 1, 2, 3, 4]

。我还在使用Swift 1.2

2 个答案:

答案 0 :(得分:2)

(0...4)

创建Range

.map() { $0 }

将变换(此处为无变换)应用于该范围的每个元素,并返回包含该变换结果的数组,即[Int]。底部是map的引用。 $0表示方法的第一个参数,因此$1将是第二个参数,依此类推。这里$0表示先是0,然后是1 ......

例如,如果你想创建2,4,6,你可以使用这样的地图:

var values = (1...3).map { $0 * 2 }

所以你先乘1 * 2,然后再乘以2 * 2 3 * 2.

答案 1 :(得分:1)

范围周围的括号仅用于使用Range类型的方法,在本例中为map。 此方法获取集合的每个元素(代码中的范围),将其传递给闭包或块({ $0 }),并在map返回的集合中使用闭包的返回值。 Swift语法允许在map()的括号后面写闭包,如果闭包非常简单,你甚至可以省略return和参数名称,这些名称将被称为$x,其中x是在您的情况下,基于零的渐进数字$0表示您的范围数。

如果我们扩展您的代码以使其更清晰,我们

let range = 0...4
bar values: [Int] = range.map({ (i: Int) -> Int in
    return i
})