Swift 2.0 - Argumente 'nil' oder '0' enum

8

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?

%Vor%     
keegan3d 23.08.2015, 17:44
quelle

3 Antworten

12

Optionen werden jetzt als Menge angegeben. Übergeben Sie einfach eine leere Menge: options: [] .

    
Aaron Brager 23.08.2015, 17:46
quelle
9

Nur um weitere Details hinzuzufügen: Die fraglichen Typen, wie NSJSONReadingOptions, werden in Obj-C als NS_OPTIONS deklariert.

Vor Swift 2

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.

%Vor%

Heutzutage

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.)

%Vor%

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:

%Vor%

Sie können also if jsonOptions.contains(.AllowFragments) { ... und so verwenden.

    
jtbandes 23.08.2015 18:16
quelle
0

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

    
Jakub Truhlář 01.02.2017 10:41
quelle

Tags und Links