2016-09-05 9 views
16

Nie tak pewny dlaczego ja dostaję „niejednoznaczne użycie«wyliczyć obiektów»w Swift 3.Swift 3 - PHFetchResult - enumerateObjects - Niejednoznaczne stosowanie „wyliczać obiekty”

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

    } 

jakieś przemyślenia Ten kod był? działa dobrze w Swift 2.2

Odpowiedz

31

mam napotkasz to kilka razy ja, i wydaje się być problem ze składnią zamknięcia spływu Swifta tym nawiasów wokół argumentu zamykającego powinno załatwić sprawę.

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

}) 

Edytuj: Proszę zobaczyć odpowiedź rintaro dla wyjaśnienia, dlaczego tak się dzieje.

+0

Dziękuję za to! To doprowadzało mnie do szaleństwa. –

+0

Dziękujemy! uratowałeś mój dzień! – user2423351

+0

Dzięki wam !!!!! Najdziwniejsze jest to, że jeśli podążasz za autouzupełnianiem w Xcode, to nadal będziesz dawał ci błędne zachowanie .... To zdziałało !! –

6

Podczas korzystania enumerateObjects ze spływu zamknięcie, istnieją dwie przeciążone kandydatami do niego:

Obecnie my muszą ujednoznacz to.

Jeśli chcesz użyć składni spływu zamknięcia, tutaj jest obejście:

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

To działa, ponieważ jest to równoznaczne z

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

Dzięki za udzielenie intuicji. Czy nadal możesz powiedzieć, że to błąd, że Xcode nie wykrywa automatycznie, której wersji funkcji chcemy? –

+0

Świetna odpowiedź opisująca przerażająco skomplikowaną rzeczywistość. @MatthewSeaman to nie jest błąd: to wszystko powinno działać. –