ios - Swift : How $0 works in Array. forEach?

标签 ios arrays swift macos foreach

我看到大多数 swift 开发人员都开始使用 .forEach,了解它迭代数组的另一种方式。但是“$0”的含义是什么以及它是如何工作的呢?如果它是一个索引,那么它应该递增 0,1,2...

@IBOutlet var headingLabels: [UILabel]!
....

headingLabels.forEach { $0.attributedText = NSAttributedString(string: $0.text!, attributes: [NSKernAttributeName: 1]) }

最佳答案

简答

看这段代码

let nums = [1,2,3,4]
nums.forEach { print($0) }

这里是 forEach 之后的闭包

I mean this part { print($0) }

被执行 4 次(对数组中的每个元素执行一次)。每次执行时,$0 都包含 nums 数组的 n-th 元素的副本

So the first time contains 1, then 2 and so on...

这是输出

1
2
3
4

比较forEachfor-in结构

那么我们可以说 $0 就像下面代码中的 n 值吗?

for n in nums {
    print(n)
}

是的,它的含义几乎相同。

它是如何工作的?

forEach 方法接受一个闭包。闭包有这个签名。

(Self.Generator.Element) throws -> Void

当您使用 forEach 时,它会与您签订“契约(Contract)”。

  1. 您向 forEach 提供一个闭包,该闭包接受输入中的单个参数,其中该参数具有与数组相同的类型
  2. forEach 会将闭包应用于数组的每个元素。

例子

nums.forEach { (n) in
    print(n)
}

但是在 Swift 中,您可以省略闭包参数的显式名称。在闭包内部,您可以使用 $0 作为第一个参数,使用 $1 作为第二个参数,依此类推。

所以前面的代码片段也可以这样写

nums.forEach {
    print($0)
}

关于ios - Swift : How $0 works in Array. forEach?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38375417/

相关文章:

ios - 向 UIBezierPath 动态添加值

ios - 函数内部函数保留周期

ios - Cocos2d播放2个不同的背景音乐文件或循环播放效果

ios - CNContactViewController 无法调用或发送消息(使用 Peek 和 Pop 或 UIViewControllerPreviewingDelegate 显示)

arrays - Excel VBA 数组未从存储过程记录集中接收所有值 - 结果与在 Excel 之外运行存储过程不同

arrays - 为什么结构数组比较有不同的结果

java - 从方法返回数组

ios - 在 Swift 中将 JSON 字符串转换为 Object 的简单而干净的方法

ios - 如何以编程方式快速更改应用程序的 Localizable 字符串文件?

ios - 如何将 UIView 的边框放在 UIImage 后面?