2016-07-11 6 views
0

Ich möchte eine Funktion zum Vergleichen von [String]? mit [Zeichenfolge]? wo beides, beides oder keines ist gleich Null. Wenn beide nil sind, dann gibt die Funktion trueWie kann man mit optionalen Arrays vergleichen?

zurück Gibt es eine Notation, bei der ich vermeiden kann, einen Wert zu prüfen, der gleich null ist?

Dies:

func compare_colours(a1:[String]?, a2:[String]?) -> Bool { 
    return a1 == a2 
} 

ist in Swift nicht gültig, weil ich hinzufügen bräuchten ! zuerst:

return a1! == a2! 
+0

Wenn beide Eingänge Null sind, was ist dann der erwartete Rückgabewert? – ColGraff

+0

@ martin-r Ich kann sehen, dass dieses Q sehr ähnlich zu dir ist. Meins fragt nach funktionierendem Code und deins, warum eine Lösung nicht funktioniert. Könnte dieses Q eine logische Folge sein? – Carl

+1

Aber die Antwort auf das "Duplikat" enthält Arbeitscode. –

Antwort

0
if let a1Unwrapped = a1{ 
    if let a2Unwrapped = a2{ 
     return a1Unwrapped == a2Unwrapped 
    } 
} 
if (a1 == nil && a2 == nil){ 
    return true 
} 
return false 
+1

falsches Ergebnis, wenn 'a1' und' a2' 'nil' sind (sollte' true' sein) – Alexander

-1

Oder benutzen Sie einfach den optional als leer und Sie können passen Sie alle Szenarien an.

func compare_colours(a1:[String]?, a2:[String]?) -> Bool { 
    return a1 ?? [""] == a2 ?? [""] 
} 
+2

Mit Ihrem Ansatz '[" "] == nil' – Daniel

+0

So sollte es sein. Er prüft, ob eine Reihe von Farben einer anderen Menge entspricht. Wenn man leer ist und das andere Null, dann sind sie in diesem Sinne gleich. Einfachheit. –

0

ich lieber mit guard über if Anweisungen, damit ich die pyramid of doom vermeiden:

func compare_colours(a1:[String]?, a2:[String]?) -> Bool { 
    if a1 == nil && a2 == nil  { return true } 
    guard let unwrapped1 = a1 else { return false } 
    guard let unwrapped2 = a2 else { return false } 
    return unwrapped1 == unwrapped2 
} 

Sie nicht für null müssen überprüfen. Stattdessen können Sie überprüfen, ob die optionale Enum ist .None:

switch (a1, a2) { 
case (.None, .None): print("Both unset Optional") 
} 

Wie auch immer Sie die gleiche grundlegende Sache zu tun haben, überprüfen Sie für nil/.None. Für weitere Details, wie dies funktioniert, können Sie diese Antwort lesen: https://stackoverflow.com/a/33209762/887210

+1

falsches Ergebnis, wenn 'a1' und' a2' 'nil' sind (sollte' true') sein. – Alexander

+0

Richtig, obwohl es nicht spezifiziert ist, was das erwartete Ergebnis sein sollte, wenn beide Null sind. – ColGraff

+0

Dies ist eine funktionierende Lösung für Code. Aber Sie haben meine Unterfrage nicht beantwortet: "Gibt es eine Notation, bei der ich es vermeiden kann, einen Wert zu prüfen, der gleich null ist?" mit einem "nein, gibt es nicht" :) - fügen Sie das hinzu und ich kann ankreuzen. – Carl

Verwandte Themen