Swift 3 - PHFetchResult - enumerateObjects - Неоднозначное использование "перечисляемых объектов"

Не так уверен, почему я получаю "Неоднозначное использование" перечислять объекты "в 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

Ответ 1

Я столкнулся с этим несколько раз сам, и это, похоже, проблема с синтаксисом закрытия закрытия 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 для объяснения причин этого.

Ответ 2

При использовании enumerateObjects с закрытием закрытия, для него есть два перегруженных кандидата:

В настоящее время нам необходимо устранить эту проблему.

Если вы хотите использовать синтаксис закрывающего закрытия, обходной путь:

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

Это работает, потому что это эквивалентно

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