Ich muss sagen, ich stimme den meisten Aussagen in den Richtlinien zu, aber diese scheint inkonsistent zu sein:
https://github.com/raywenderlich/swift-style-guide#type -annotation-for-empty-arrays-and-dictionaries
Die Anleitung gibt an:
// preferred
var names: [String] = []
var lookup: [String: Int] = [:]
wird bevorzugt
// not preferred
var names = [String]()
var lookup = [String: Int]()
Der Leitfaden bevorzugt jedoch im Interesse eines kompakten Codes in der Regel abgeleitete Typen:
// preferred
let message = "Click the button"
let currentBounds = computeViewBounds()
```schnell
// nicht bevorzugt
let message: String = "Klicken Sie auf die Schaltfläche"
let currentBounds: CGRect = computeViewBounds()
If we were being consistent, shouldn't we always prefer inferred types over explicit declaration? I would think this is more consistent
```swift
// should be preferred
var names = [String]();
var lookup = [String: Int]();
Meiner Meinung nach ist die Anleitung hier richtig. Es sagt einfach, wenn erforderlich, geben Sie den Typ an. Wenn nicht, lass es fallen.
Ok, aber ist das nicht wirklich eine Stilwahl? Nein nicht wirklich. Schauen wir uns einige Beispiele an:
// preferred
var colors: [UIColor]?
var colors: [UIColor] = []
var colors: [UIColor] = [.red, .green, .blue]
Lassen Sie uns nun diese 3 Beispiele in Ihre vorgeschlagene Präferenz umwandeln.
var colors: [UIColor]?
var colors = [UIColor]()
var colors = [UIColor.red, UIColor.green, UIColor.blue]
Sehen Sie, was dort passiert ist? Für die letzte Zeile müssen wir jetzt UIColor für jedes Element im Array wiederholen. Sie können auch argumentieren, dass die Deklarationen jetzt weniger konsistent sind.
Wie wäre es dann mit einer Methode? Aus Gründen der Konsistenz können Sie natürlich immer den Typ angeben. Ich kann mir jedoch vorstellen, dass die meisten Entwickler auf redundanten Code verzichten möchten.
// do we need to specify type?
var colors: [UIColor] = rainbowColors()
// no we don't
var colors = rainbowColors()
Ist das sinnvoll?
_Edit: Fairerweise können Sie auch ein Array wie dieses ableiten, aber da wir über Konsistenz sprechen, ziehe ich dieses vom Tisch. Dachte nur, ich liege richtig._
// preferred
var colors: [UIColor] = [.red, .green, .blue]
// not preferred
var colors = [.red, UIColor.green, .blue]
ich wäre mitgegangen
var colors: [UIColor]?
var colors = [UIColor]()
var colors: [UIColor] = [.red, .green, .blue]
Anstatt was du oben gemacht hast. Ziehen wir es nicht vor, den abgeleiteten Typ zu verwenden, außer wenn eine explizite Deklaration erforderlich ist? In diesem Sinne scheint die dritte Zeile konsistent.
Sie haben insofern Recht, als ich die Regel wahrscheinlich zu stark vereinfacht habe. Trotzdem ist an beiden Ansätzen nichts auszusetzen, es kommt nur auf die Präferenz an. In meinem Fall finde ich das Folgende konsistenter, lesbarer und praktischer, wenn man zwischen leeren / nicht leeren Zuständen hin- und hergeht. Ich finde, wir sollten andere mitreden lassen.
// preferred
var colors: [UIColor]?
var colors: [UIColor] = []
var colors: [UIColor] = [.red]
// not preferred (in my opinion)
var colors: [UIColor]?
var colors = [UIColor]()
var colors: [UIColor] = [.red]
Das Problem, das Sie damit haben, ist diese Inkonsistenz:
// inconsistent?
var colors: [UIColor] = []
var colors = rainbowColors()
// your preference
var colors = [UIColor]()
var colors = rainbowColors()
@RobertGummesson , Sie
var ints: Set = [1, 1, 2, 2]
var ints = Set([1, 1, 2, 2])
var ints = Set(arrayLiteral: 1, 1, 2, 2)
Nachdem Sie sich also für die erste Wahl entschieden haben, die für nicht leere Mengen besser geeignet ist, können eine leere Version und entsprechende Array-Konventionen rückgeformt werden.
var ints: Set<Int> = []
var ints = Set<Int>() // instead of this, which, without the above, seems fine.
var ints = [1, 1, 2, 2]
var ints: [Int] = []
Hilfreichster Kommentar
Meiner Meinung nach ist die Anleitung hier richtig. Es sagt einfach, wenn erforderlich, geben Sie den Typ an. Wenn nicht, lass es fallen.
Ok, aber ist das nicht wirklich eine Stilwahl? Nein nicht wirklich. Schauen wir uns einige Beispiele an:
Lassen Sie uns nun diese 3 Beispiele in Ihre vorgeschlagene Präferenz umwandeln.
Sehen Sie, was dort passiert ist? Für die letzte Zeile müssen wir jetzt UIColor für jedes Element im Array wiederholen. Sie können auch argumentieren, dass die Deklarationen jetzt weniger konsistent sind.
Wie wäre es dann mit einer Methode? Aus Gründen der Konsistenz können Sie natürlich immer den Typ angeben. Ich kann mir jedoch vorstellen, dass die meisten Entwickler auf redundanten Code verzichten möchten.
Ist das sinnvoll?
_Edit: Fairerweise können Sie auch ein Array wie dieses ableiten, aber da wir über Konsistenz sprechen, ziehe ich dieses vom Tisch. Dachte nur, ich liege richtig._