[Swift] Ich dachte über Vergleiche nach

Dies ist eine Schreibweise der Gedanken des ersten Gelehrten, des Autors, als er "compare" zum ersten Mal traf.

Vergleichen bezieht sich hier auf Swifts String-Klasseninstanzmethode compare.

Was ist das Problem mit dem Rückgabewert von compare

Es ist ein "Vergleichsergebnis". Ja das ist es.

Es ist ein Anfänger, der nicht wird ... Ich war einer von ihnen. Das Apple Developer Document sagt auch ** Rückgabewert ** prominent!

Ich stolpere an einem so rudimentären Ort, aber der Prozess von Versuch und Irrtum war eine gute Studie, deshalb habe ich beschlossen, ihn hier in Form einer Ausgabe zu belassen.

Wo habt ihr euch getroffen?

Einführung in Swift Practice 3rd Edition P53 Erweiterte Bedienung durch Foundation mit Beispielcode

Es wird der obige Teil sein. Ich denke, es gibt viele Anfänger, die dieses Buch zum schnellen Lernen in die Hand nehmen. Ich blieb stecken, als ich den folgenden Code sah, der plötzlich oben auftauchte.

//P53 Beispielcode
import Foundation //compare ist eine Methode, die von einer Bibliothek namens Foundation bereitgestellt wird

//Vergleich der Reihenfolge zwischen zwei Zeichenfolgen
let options = String.CompareOptions.caseInsensitive
let order = "abc".compare("ABC", options: options)
order == ComparisonResult.orderedSame //true

Im obigen Code überprüft die Methode compare (_: option) die Reihenfolge zwischen den beiden Zeichenfolgen. --Omitted-- Das Ergebnis ist ein Wert von .orderSame, was bedeutet, dass die Reihenfolge dieselbe ist.

Es ist schwer zu verstehen, wenn man es nur liest.

Versuchen Sie, den Code zu lesen

Erste Linie

let options = String.CompareOptions.caseInsensitive

Dies ist eine Option der Compare-Methode, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird. Dies ist als konstante Option definiert.

2. Zeile

let order = "abc".compare("ABC", options: options)

Auf der rechten Seite wird die Vergleichsmethode für die Zeichenfolge "abc" verwendet, um sie mit "ABC" in () zu vergleichen. Zu diesem Zeitpunkt erhält es die zuvor als Argument definierten "Optionen". Das hier erhaltene Ergebnis ist als konstante "Ordnung" definiert.

3. Zeile

order == ComparisonResult.orderedSame

Die in der zweiten Zeile definierten order und ComparisonResult.orderedSame werden auf den Vergleichsoperator angewendet, und true wird zurückgegeben.

Denken Sie an die Details

Aufgrund der obigen Ausführungen habe ich den Code ein wenig vereinfacht. Die Optionen werden weggelassen, da sie nichts mit der Frage zu tun zu haben scheinen.

let order = "abc".compare("abc")
order == ComparisonResult.orderedSame // true

Mit anderen Worten, der Rückgabewert von "abc" .compare ("abc") "ist" ComparisonResult.orderedSame "?

Ich habe nachgeschaut.

let hoge = "abc".compare("abc")
print(hoge) // NSComparisonResult

Ausführungsergebnis ・ ・ NS NSComparisonResult

Was ist ein Vergleichsergebnis?

Es scheint notwendig zu sein, diesen Kerl zu verstehen, der mit einem Gesicht erschien, das selbst mit dem Beispielcode nicht frisst.

ComparisonResult

Bei der Untersuchung wurde festgestellt, dass ComparisonResult ein ** Aufzählungstyp ** ist und drei Fallkonstanten aufweist.

enum ComparisonResult: Int {
    case orderedAscending = -1
    case orderedSame = 0
    case orderedDescending = 1
}

Dies bedeutet, dass die Vergleichsmethode ein Vergleichsergebnis zurückgibt, nachdem einer der Fälle abgerufen wurde.

--case orderAscending ・ ・ ・ < --case orderSame ・ ・ ・ = --case orderDescending ・ ・ ・ >

Da das Vergleichsziel diesmal gleich war, haben wir den Wert orderSame und erhalten Dies bedeutet, dass "ComparisonResult.orderedSame" zurückgegeben wurde.

Rückgabewert von compare

Kehren wir also zum Code am Anfang zurück. Da es eine große Sache ist, werde ich "ABC" in "DEF" ändern.

let options = String.CompareOptions.caseInsensitive
let order = "abc".compare("DEF", options: options)
order == ComparisonResult.orderedAscending
// true

Der Rückgabewert von "abc" .compare ("DEF", options: options) "in der zweiten Zeile ist" ComparisonResult.orderedAscending ", also ist es wahr. Das Vergleichsergebnis ist "abc <DEF".

Später reden

Selbst wenn ich es jetzt selbst schreibe, ist es ein Inhalt, der mich wundern lässt: "Warum hat dich das interessiert?"

Der Grund, warum ich daran denken kann, könnte sein, dass ich verwirrt war, dass der Rückgabewert der Methode ein Aufzählungstyp war.

Es ist eine andere Methode, aber ich stellte mir das folgende einfache Verhalten vor. Code und Ausführungsergebnisse wie erwartet

//Code und Ausführungsergebnisse wie erwartet
"abc".isEqual("abc")
// true

Auch diesmal fiel es mir schwer zu verstehen, weil ich das Vorurteil hatte, dass die oben erwähnte Form nicht aus meinem Kopf geriet und dass "Vergleichsmethoden wahr / falsch zurückgeben".

** Fazit: Ich hätte das offizielle Dokument sofort lesen sollen. ** ** **

Das ist es.

Vielen Dank für das Lesen bisher m (_ _) m

Recommended Posts

[Swift] Ich dachte über Vergleiche nach
[Swift] [Anfänger] Ich habe viel nach #selector gesucht
[Swift] Über den Aufzählungstyp
[Ruby] Ich habe über den Unterschied zwischen each_with_index und each.with_index nachgedacht
[Spring Boot] Ich dachte über testbaren Code von DI nach
Was ich über Java 8 recherchiert habe
[Swift] [Anfänger]] Über den Bereichsoperator
[Swift] Zusammenfassung über den Bool-Typ
Was ich über Java 7 recherchiert habe
10 Dinge, die ich an Android hasse
Vergleichen Sie Java 8 Optional mit Swift
[Java] Ich habe über die Vorzüge und Verwendungen von "Schnittstelle" nachgedacht.
Was ich über Kotlin gelernt habe
Was ich über Java 5 recherchiert habe
Ich dachte darüber nach, wie ich Swifts willSet richtig einsetzen sollte.
Woran ich dachte, als ich anfing, von Java nach Kotlin zu migrieren
[Swift] Über die iterative Verarbeitung von "for-in-Anweisungen"
Was ich über Java-Lernen recherchiert habe
Beim Aktualisieren meiner eigenen App habe ich ernsthaft über die Paketstruktur nachgedacht
Ich überlegte, wie ich es serverlos machen und gleichzeitig die Lieferantenbindung vermeiden könnte