2016-09-05 6 views
16

nicht so sicher, warum ich „mehrdeutige Verwendung von 'aufzuzählen Objekte' in Swift bekommen 3.Swift 3 - PHFetchResult - enumerateObjects - Unklare Verwendung von 'aufzuzählen Objekte'

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) 
     }) 

    } 

Irgendwelche Gedanken Dieser Code war? in Swift adaequat 2.2

Antwort

31

ich habe in diese ein paar mal laufen selbst, und es scheint ein Problem mit Swifts nachlauf Schließung Syntax zu sein Einschließlich Klammern um die Schließung Argument sollte es tun.

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) 
    }) 

}) 

Bearbeiten: Bitte lesen Sie Rintaros Antwort für eine Erklärung, warum dies passiert.

+0

Danke, dass für! Es hat mich verrückt gemacht. –

+0

Danke! du hast meinen Tag gerettet! – user2423351

+0

Danke dir !!!!! Der seltsamste Teil ist, dass, wenn Sie Autocompletion auf Xcode folgen, es Ihnen immer noch ein fehlerhaftes Verhalten geben wird .... Das hat den Trick gemacht !! –

6

Wenn enumerateObjects mit der Schließung Hinter, gibt es zwei überladene Kandidaten dafür:

Derzeit wir brauchen disambiguate dies.

Wenn Sie Verschluss Syntax verwenden Hinter, hier ist die Abhilfe:

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

Dies funktioniert, weil dies zu

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

Vielen Dank für die Intuition. Würden Sie immer noch sagen, dass es ein Fehler ist, dass Xcode nicht automatisch erkennt, welche Funktionsversion wir wollen? –

+0

Große Antwort, die die erschreckend komplizierte Realität beschreibt. @MatthewSeaman, es ist kein Fehler: Es ist, wie all diese Inferenz-Sachen funktionieren sollen. –

Verwandte Themen