我想用一系列数字初始化一个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
答案 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
})