Ios UILabel上的Swift地图;闭包中不包含匿名闭包参数;

Ios UILabel上的Swift地图;闭包中不包含匿名闭包参数;,ios,swift,uilabel,closures,Ios,Swift,Uilabel,Closures,对于UITableViewCell的一个实例,在contentView上分别调用addSubview(),可能会被简化为Swiftmap(:): 然而,简写会抛出一个错误:“闭包中不包含匿名闭包参数”。.forEach会是这里最好的吗 当闭包返回void时使用.forEach [nameLabel, numberLabel, informationLabel].forEach { contentView.addSubview($0) } 此代码无效,因为它使用的是匿名闭包参数$0,而不在闭包

对于
UITableViewCell
的一个实例,在
contentView
上分别调用
addSubview()
,可能会被简化为Swift
map(:)


然而,简写会抛出一个错误:“闭包中不包含匿名闭包参数”。
.forEach
会是这里最好的吗

当闭包返回void时使用.forEach

 [nameLabel, numberLabel, informationLabel].forEach { contentView.addSubview($0) }

此代码无效,因为它使用的是匿名闭包参数
$0
,而不在闭包中

[nameLabel, numberLabel, informationLabel].map(contentView.addSubview($0))
有两种方法可以解决此问题,或者将其置于关闭状态:

[nameLabel, numberLabel, informationLabel].map { contentView.addSubview($0) }
或者最好直接使用实例方法:

[nameLabel, numberLabel, informationLabel].map(contentView.addSubview)
在任何一种情况下,您都应该使用
forEach
而不是
map
,因为您不关心
addSubview
的(
Void
)返回值:

 [nameLabel, numberLabel, informationLabel].forEach(contentView.addSubview)

每当你使用像
map
这样的高阶函数时,你必须用
{…}
包装它所做的事情,所以它应该是
映射{contentView.addSubView($0)}
谢谢,亲爱的!你帮了我。为什么
地图(:)
<代码>添加子视图(:)不返回任何内容。听起来你只是想要一个简单的循环。@Hamish我同意。我意识到,
.forEach
是最好的,因为我记得,
.map(:)
返回一个转换后的
数组,这对我来说是完全不必要的。@Eric我的评论有一部分是错误的,我相信你已经看到了公认的答案。除了执行我所说的操作外,您还可以传递一个函数(例如
contentView.addSubview
)并执行类似以下操作:
map(contentView.addSubview)
 [nameLabel, numberLabel, informationLabel].forEach(contentView.addSubview)