Występuje dziwny problem z funkcją Array.sort(). Nie akceptuje skróconego zamknięcia. Xcode narzeka z następującym komunikatem, gdy używa skróconego zamknięcia: Cannot invoke 'sort' with an argument list of type '((_, _) -> _)'
Ale działa z dłuższą formą tego samego zamknięcia.Swift Array.sort() nie zaakceptuje zamknięcia w skróconym formacie
var names = ["Al", "Mike", "Clint", "Bob"]
// This `sort()` function call fails:
names.sort {
$0.localizedCaseInsensitiveCompare($1) == .OrderedAscending
}
// This `sort()` function call works:
names.sort { (first: String, second: String) in
return first.localizedCaseInsensitiveCompare(second) == .OrderedAscending
}
Żeby dodatkowo dziwne, gdybym najpierw użyć długiej formy zamknięcia, a następnie rodzaj ponownie za pomocą formularza skrótowej, to działa dobrze!
var names = ["Al", "Mike", "Clint", "Bob"]
// Works fine, orders the array alphabetically
names.sort { (first: String, second: String) in
return first.localizedCaseInsensitiveCompare(second) == .OrderedAscending
}
// This shorthand version now works as well, reversing the order of the array
names.sort {
$0.localizedCaseInsensitiveCompare($1) == .OrderedDescending
}
W najlepszym razie, robię coś nie tak i uczę się czegoś. Najgorszy przypadek, to tylko głupi błąd z Xcode lub Swift.
Wszelkie pomysły?
OK, który jest bardzo dziwne i zdecydowanie to błąd kompilatora. Powinieneś go [złożyć] (http://bugreport.apple.com/). –
Spodziewałem się, że to będzie zabawa na placu zabaw, ale ta sama zmiana kolejności i kompilacji ma miejsce również w przypadku 'swiftc'. –
Interesujące. Jeśli po prostu wstawisz jakiekolwiek odniesienie do 'NSComparisonResult' (" Niech x: NSComparisonResult "to zrobi) na górze pliku, to również rozwiązuje problem z pierwszym przykładem. To tak, jakby [wyrażenie niejawnego członka] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Expressions.html#//apple_ref/doc/uid/TP40014097-CH32-ID394) funkcja wymaga "zalewkowania" z bardziej wyraźnym odniesieniem do typu wyliczeniowego, zanim będzie działać. W związku z tym zmiana kolejności wyrażeń naprawia to. –