Ich habe in Swift 2.0 auf dieses eine paar Funktionen gestoßen und mich gefragt, ob es eine Arbeit gibt. Es scheint keine Möglichkeit zu geben, Enum-Argumente in Swift 2.0 jetzt nicht anzugeben. Zum Beispiel scheinen diese beiden Methoden etwas anderes als nil
oder 0
zu benötigen. Gibt es einen Weg dazu?
Optionen werden jetzt als Menge angegeben. Übergeben Sie einfach eine leere Menge: options: []
.
Nur um weitere Details hinzuzufügen: Die fraglichen Typen, wie NSJSONReadingOptions, werden in Obj-C als NS_OPTIONS
deklariert.
Vor Swift 2 wurden diese nach Swift als RawOptionSetType importiert, was BitwiseOperationsType und NilLiteralConvertible erforderte. Auf diese Weise konnten Sie nil
übergeben und Werte mit den Operatoren a | b
, a & ~b
usw. kombinieren.
In Swift 2 wurde es ein bisschen mehr verallgemeinert. Diese sind jetzt OptionSetType , was erfordert SetAlgebraType und RawRepresentable. (Der zugrunde liegende RawValue
-Typ kann BitwiseOperationsType sein oder auch nicht.)
SetAlgebraType ist nicht mehr NilLiteralConvertible, aber ArrayLiteralConvertible , also können Sie []
anstelle von nil
verwenden, um "keine Optionen" zu meinen.
Und Sie können mehrere Optionen in einem Array kombinieren : options: [.MutableLeaves, .AllowFragments]
.
SetAlgebraType hat auch viel mehr lesbare Funktionsnamen als diese bitweisen Operatoren &
, |
, ^
, etc:
Sie können also if jsonOptions.contains(.AllowFragments) { ...
und so verwenden.
Sie übergeben []
(eine leere Menge)
Einige enums
haben eine explizite Option, die 0
bedeutet, aber Swift 3 importiert diese manchmal nicht, weil []
dasselbe bedeutet. Wie UIViewAutoresizing
s UIViewAutoresizingNone