2016-08-22 6 views
1

Dieser Code wurde auf Xcode 8 Beta 5 kompiliert, aber in Beta 6 gebrochen. Was ist die richtige neue Swift 3 Möglichkeit, diesen Vergleich zu machen?Xcode 8 beta 6 swift 3 lokalisierteCaseInsensitiveCompare

self.categories = categories.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedDescending } 

Der Fehler ist

Argument passes to call that takes no arguments

+0

Könnte einen Fehler auf bugs.swift.org einreichen, wenn die Fehlermeldung wirklich so schlecht ist. Zeigt es auf welchen Anruf es sich bezieht? – jtbandes

+0

Der Code funktioniert für mich, aber auch die Dokumente empfehlen, sortiert (nach: <) zu verwenden, um absteigend zu sortieren. – jjatie

+0

können Sie in Swift 3 'sort' ohne' ed' verwenden, um an Ort und Stelle zu sortieren. 'categories.sort {$ 0.localizedCaseInsensitiveCompare ($ 1) == .orderedDescending}' –

Antwort

1

ich die gleiche Fehlermeldung nur gelungen zu bekommen.

In meinem Test-Code, wenn ich die Instanz Eigenschaft erklären categories als:

var categories: [NSString] = [] 

Ich habe haben diese Fehlermeldung:

error: argument passed to call that takes no arguments

Wenn Ihr Fall auf diese sehr ähnlich ist, was Sie brauchen Um die Eigenschaftsdeklaration zu ändern:

var categories: [String] = [] 

Auch wenn dies nicht für Ihre passt Problem, sollten Sie besser überprüfen, diese Art von Typ-Fehlpaarung, denn wie der Swift 3/Xcode 8 Beta 6:

  • Bridging conversions are no longer implicit. The conversion from a Swift value type to its corresponding object can be forced with as . For example: string as NSString . Any Swift value can also be converted to its boxed id representation with as AnyObject . (SE-0072)

(Entnommen aus den Release Notes von Xcode 8 Beta 6.)

+0

Das Problem ist self.categories war ein NSArray ?. Ich dachte, dass das Problem mit dem Befehl sort war, weil Argumente besprochen wurden. –

+0

@JasonHocker, Swift 3 entwickelt sich so schnell, dass das Swift-Team keine Zeit hat, seine Diagnosemeldungen zu verfeinern. Wenn Swift keine passende Überladung von 'sorted' findet, die einen erwarteten Typ (in Ihrem Fall' NSArray'?) Zurückgibt, gibt es manchmal diese Art von unzulänglicher und verwirrender Nachricht aus. Und ich denke, diese Art von schlechter Diagnose sollte als Fehler betrachtet werden, und Sie sollten besser einen Fehlerbericht an Apple oder swift.org senden. – OOPer

1

Same Ausgabe hier. Ich habe versucht, ein Snippet aus dem offiziellen Swift 3 Guide in Xcode Beta zu kompilieren und habe den gleichen Fehler - Argument passes to call that takes no arguments. Obwohl ich IBM Swift Sandbox verwendete, kompilierte es erfolgreich.

let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"] 
func backward(_ s1: String, _ s2: String) -> Bool { 
return s1 > s2 
} 
var reversedNames = names.sorted(by: backward) 

Von here suchen, scheint es, dass die API von x.sorted geändert sortierten (isOrderedBefore:>) zu x.sorted (nach:>). Ich schätze, dass in der zukünftigen Xcode-Beta dies erledigt sein wird.

+0

eine andere Art zu schreiben, dass: var reversedNames = names.sorted (von: {s1, s2 -> Bool in s1> s2}) – Edudjr