2016-06-23 35 views
1

Ich habe eine Funktion: myFunction (param1: Klasse ?, param2: Klasse ?, param3: Int, ...) wobei die 2 ersten Parameter optional sind und der Typ von ihnen ist a benutzerdefinierte Klasse. Aber manchmal, die Klasse, die ich in diese Parameter einfügen muss, existiert nicht, deshalb sind diese Parameter optional. Und ich kann nicht "Null" als Wert angeben.wenn Bedingung in Swift-Funktion für optionalen Parameter

So würde Ich mag so etwas tun:

if (param1 !=nil && param2 != nil) { 
    myFunction(param1: myClass, param2: myClass, param3: 2, ...) 
} 
else if (param1 ==nil && param2 == nil) { 
    myFunction(param3: 2, ...) 
} 
else if (param1 !=nil && param2 == nil) { 
    myFunction(param1: myClass, param3: 2, ...) 
} 
else if (param1 ==nil && param2 != nil) { 
    myFunction(param2: myClass, param3: Int, ...) 
} 

...

Das Problem ist, dass in meiner Funktion ich mehr optionale Parameter so, wenn ich ein „haben müssen, wenn "Bedingung für alle Optionen, es wird unmöglich sein, zu verwalten.

Gibt es eine Möglichkeit, eine if-Bedingung in die Funktionsparameter zu setzen? Beispiel:

myFunction(myClass==nil ? <nothing>:param1: myClass, myClass==nil ? <nothing>:param2: myClass, param3: 2, ...) 

Vielen Dank für Ihre Hilfe :)

Grüße,

+0

'Aber manchmal, die Klasse, die ich in diese Parameter einfügen muss, existiert nicht, deshalb sind diese Parameter optional.' Wie können Sie eine Klasse haben, die nicht als eine Art von Parameter existiert? – Alexander

+1

Auch ich bin neugierig, was Sie denken, nil bedeutet, wenn nicht '' – Alexander

+0

sollten Sie über Klassen, Typen, Instanzen, etc. klar werden, was passieren Sie wo unter welchen Umständen? Wollen Sie den * type * 'Int' wirklich beim letzten Funktionsaufruf übergeben? – luk2302

Antwort

0

Sie sind nicht klar über Ihre Klassen als params in der Funktion. Sie sollten sie entsprechend der Verwendung neu erstellen. Wenn Sie überhaupt diese Funktion mit den ersten 2 Parametern als optional verwenden möchten, könnten Sie so etwas tun.

if let param1 = param1 { 
    if let param2 = param2 { 
     myFunction(param1: myClass, param2: myClass, param3: 2, ...) 
    }else{ 
     myFunction(param1: myClass, param3: 2, ...) 
    } 
}else if let param2 = param2 { 
    myFunction(param2: myClass, param3: Int, ...) 
}else{ 
    myFunction(param3: 2, ...) 
} 
+0

Danke. Ich werde versuchen, die Architektur zu ändern oder etwas zu ändern – Adz

0

Sie entwickelt, um Ihre Funktion einige Parameter als optional zu bekommen, als Sie auspacken egal sollten, wenn Sie die Funktion aufrufen, müssen Sie nur diese optionale params in Ihrer Funktion mit Wache zu handhaben oder wenn lassen.

+0

Oh, ich verstehe! Vielen Dank, ich werde es versuchen – Adz