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 时, 有两个超载的候选者:

目前,我们需要消除歧义。

如果您想使用尾随闭包语法,解决方法如下:

assets.enumerateObjects(_:) { (object, count, stop) in
    content.append(object)
}

这是可行的,因为这等同于

let unapplied = assets.enumerateObjects(_:)
unapplied { (object, count, stop) in
    content.append(object)
}