que - Swift 3-PHFetchResult-enumerateObjects-Uso ambiguo de ''enumerar objetos''
que es ambiguo definicion (2)
Cuando se usa enumerateObjects
con cierre final, hay dos candidatos sobrecargados para ello:
-
enumerateObjects(_:)
-
enumerateObjects(options:using:)
(porqueoptions:
está predeterminado)
Actualmente, tenemos que desambiguar esto.
Si desea usar la sintaxis de cierre final, aquí tiene la solución:
assets.enumerateObjects(_:) { (object, count, stop) in
content.append(object)
}
Esto funciona porque es equivalente a
let unapplied = assets.enumerateObjects(_:)
unapplied { (object, count, stop) in
content.append(object)
}
No estoy tan seguro de por qué estoy obteniendo "Uso ambiguo de ''enumerar objetos'' en 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)
})
}
¿Alguna idea? Este código funcionaba bien en Swift 2.2
Me he encontrado con esto unas cuantas veces, y parece ser un problema con la sintaxis de cierre de Swift. Incluir paréntesis alrededor del argumento de cierre debería hacer el truco:
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)
})
})
Edición: Por favor, vea la respuesta de Rintaro para una explicación de por qué sucede esto.