2017-09-21 14 views
10

Próbowałem przekształcić mój projekt na Swift 4 tego dnia. Mam błąd na tej linii:Niejednoznaczne użycie "filtru" podczas konwersji projektu na Swift 4

return Forum.threads?.filter({ //... }) 

Błąd mówi:

Niejednoznaczne stosowanie filtru ''

Znaleźliśmy ten kandydat (Swift.Set)

Znaleziono tego kandydata (Swift.Sequence)

threads przedmiot jest realizowany tak w Forum:

var threads: Set<Thread>? 

Więc jak rozwiązać ten problem ..? Dzięki za pomoc

EDIT: po ujawnieniu błędu w dzienniku, oto kandydaci:

Swift.Set:369:17: note: found this candidate 
    public func filter(_ isIncluded: (Set.Element) throws -> Bool) rethrows -> Set<Element> 
       ^
Swift.Sequence:35:17: note: found this candidate 
    public func filter(_ isIncluded: (Self.Element) throws -> Bool) rethrows -> [Self.Element] 
+0

Jeśli odwijasz opcjonalny, czy otrzymujesz ten sam błąd? – Sparky

+0

Tak, wypróbowałem go i nadal otrzymuję ten błąd. – Someday

+1

Prosty wątek: Ustaw ? = Set(); niech filtrowane = wątki? .filter {$ 0.isMainThread} 'kompiluje się w moim Xcode 9, dlatego pomocny może być * samodzielny * odtwarzalny przykład. –

Odpowiedz

9

Aby rozwiązać ten problem, zadeklaruj typ zmiennej, zanim ją zwrócisz.

let x: [Character] = input.filter{/**/} 
return x 

Ujednoznacznia sposób zwracania metody filter {}.

+2

Działa świetnie. Innym sposobem jest '(input.filter {/ ** /} jako [Character])' jeśli nie chcesz zmiennej tymczasowej. –

0

Wydaje się, że ogólny problem tutaj. Na przykład jest to metoda rozszerzenia na UITextView.

ambiguous filter

Można pracować wokół niego przez przepisanie jak dla pętli. (Niestety, nie jest to świetne rozwiązanie, ale przynajmniej zadziała.)

Powiązane problemy