I Aktuell haben eine Int?
erhöhen, möchte ich dies geschrieben:Gibt es eine schöne Möglichkeit, einen optionalen Int zu inkrementieren?
return index != nil ? index!+1 : nil
Gibt es eine schönere Art und Weise, dies zu schreiben?
I Aktuell haben eine Int?
erhöhen, möchte ich dies geschrieben:Gibt es eine schöne Möglichkeit, einen optionalen Int zu inkrementieren?
return index != nil ? index!+1 : nil
Gibt es eine schönere Art und Weise, dies zu schreiben?
Aus Gründen der Vollständigkeit, Optional
hat eine map()
Methode:
/// If `self == nil`, returns `nil`. Otherwise, returns `f(self!)`.
@warn_unused_result
@rethrows public func map<U>(@noescape f: (Wrapped) throws -> U) rethrows -> U?
Deshalb
index != nil ? index! + 1 : nil
entspricht
index.map { $0 + 1 }
Ich mag, dass das Inkrement mit der '+ 1' sichtbarer ist und dass es mit jeder anderen Zahl funktionieren würde :) –
können Sie rufen die successor
Eigenschaft mit optional Verkettungs:
return index?.successor()
Für einen beliebigen Wert, advancedBy
Werke:
return index?.advancedBy(15)
Wenn Sie selbst tun dies viele Male fand in Ihr Code, Sie könnten Ihren eigenen +
Operator definieren, der einehinzufügtauf ein Int?
:
func +(i: Int?, j: Int) -> Int? {
return i == nil ? i : i! + j
}
Dann könnten Sie gerade tun:
return index + 1
Schöne Ergänzung zu Ihrer Antwort! –
Danke! Ich habe noch einen weiteren hinzugefügt. – vacawama
Sie optional mit einem Fragezeichen ein beliebiges Verfahren auf einer optionalen durch das Voranstellen des Anrufs nennen kann, und das funktioniert für Postfix-Operatoren zu:
return index?++
Allgemeiner können Sie auch schreiben:
index? += 1; return index
Wie in einer gelöschten Frage gesagt, hat dies den Nachteil, nicht zu funktionieren, wenn Index eine Konstante ist (lassen) –
'Rendite-Index? + = 1' funktioniert nicht. Es gibt Kompilierungsfehler 'Fehler: kann Rückgabeausdruck von Typ '() nicht konvertieren?' Geben Sie 'Int?' zurück – vacawama
Sie haben Recht. Ich habe mein Code-Snippet bearbeitet, um das Problem zu beheben. Wie auch immer, es erfüllt immer noch nicht die Anforderung, mit Let zu arbeiten und es gibt bereits eine gute Antwort mit map. –
Egal dann. – Arc676
Nein einfache mathematische Operatoren arbeiten nicht mit Optionals. –