Swift 3 - PHFetchResult - enumerateObjects - 'enumerate objects' 的使用不明确
Swift 3 - PHFetchResult - enumerateObjects - Ambiguous use of 'enumerate objects'
不太确定为什么我会收到“在 Swift 中对 'enumerate objects' 的模糊使用 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
中运行良好
我自己已经 运行 了几次,这似乎是 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 的回答以了解为什么会发生这种情况。
使用带有尾随闭包的 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)
}
不太确定为什么我会收到“在 Swift 中对 'enumerate objects' 的模糊使用 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
中运行良好我自己已经 运行 了几次,这似乎是 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 的回答以了解为什么会发生这种情况。
使用带有尾随闭包的 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)
}