Swift 3 - PHFetchResult - enumerateObjects - 模糊使用'枚举对象'

时间:2016-09-05 17:28:42

标签: swift swift3

不太清楚为什么我会"模糊地使用'枚举对象'在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中运行良好

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

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

如果你想使用尾随闭包语法,这里有解决方法:

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

这是有效的,因为这相当于

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