不太清楚为什么我会"模糊地使用'枚举对象'在Swift 3中。
let collections = PHAssetCollection.fetchAssetCollections(with: .moment, subtype: .any, options: nil)
collections.enumerateObjects { (collection, start, stop) in
collection as! PHAssetCollection
let assets = PHAsset.fetchAssets(in: collection, options: nil)
assets.enumerateObjects({ (object, count, stop) in
content.append(object)
})
}
有什么想法?这段代码在Swift 2.2中运行良好
答案 0 :(得分:38)
我自己已经遇到过这种情况,这似乎是Swift的尾随闭包语法的一个问题。在闭包参数周围加上括号应该可以解决问题:
collections.enumerateObjects({ (collection, start, stop) in
collection as! PHAssetCollection
let assets = PHAsset.fetchAssets(in: collection, options: nil)
assets.enumerateObjects({ (object, count, stop) in
content.append(object)
})
})
编辑:请参阅rintaro的答案,了解为何会发生这种情况。
答案 1 :(得分:7)
使用带有尾随闭包的enumerateObjects
时
有两个超载候选人:
enumerateObjects(_:)
enumerateObjects(options:using:)
(因为options:
是默认的)目前,我们需要消除歧义。
如果你想使用尾随闭包语法,这里有解决方法:
assets.enumerateObjects(_:) { (object, count, stop) in
content.append(object)
}
这是有效的,因为这相当于
let unapplied = assets.enumerateObjects(_:)
unapplied { (object, count, stop) in
content.append(object)
}