2015-07-08 28 views
18

Ho una funzione con parametri di default in rapidaopzionale Parametro Default a Swift

func test(string: String = "", middleString: String = "", endString: String = "") -> Void { 
    // do stuff 
} 

voglio passare nelle variabili che saranno stringhe opzionali

let string: String? // 
let middleString: String? 
let endString: String? 

Come faccio a fare in modo che, se i parametri sono nulli, usa i parametri di default. In caso contrario, utilizzare i valori entro i optionals

test(string, middleString: middleString, endString: endString)

+0

La tua funzione dovrebbe controllare nil e quindi applicare i valori predefiniti se è nullo. L'operatore '??' rende facile farlo come in 'let s: String = string ?? "" ' –

+0

Inoltre, i parametri predefiniti consentono di lasciare i parametri fuori dalla chiamata al metodo, non altro –

risposta

47

Dovrete usare le stringhe opzionali String? come tipo di argomento, con i valori di default di nil. Quindi, quando chiami la tua funzione, puoi fornire una stringa o lasciare fuori quell'argomento.

func test(string: String? = nil, middleString: String? = nil, endString: String? = nil) -> Void { 
    let s = string ?? "" 
    let mS = middleString ?? "" 
    let eS = endString ?? "" 
    // do stuff with s, mS, and eS, which are all guaranteed to be Strings 
} 

All'interno della vostra funzione, dovrete controllare ogni argomento per nil e sostituirlo con un valore predefinito lì. L'utilizzo dell'operatore ?? lo rende facile.

È quindi possibile chiamare la funzione fornendo tutti gli argomenti, senza argomenti, o solo quelli che si desidera includere:

test(string: "foo", middleString: "bar", endString: "baz") 
test() 
test(string: "hello", endString: "world") 
+0

L'OP può cancellare '-> Void' nella dichiarazione della funzione (e' = nil's se l'implementazione non richiede i valori di default dei parametri). –

+1

@AaronBrager Ho concordato con '-> Void', ma mi piace rispecchiare il codice dell'OP quando non è dannoso. Riguardo ai parametri di default, l'ho letto come una delle parti principali della sua domanda. – justinpawela

+0

Ha senso. FWIW, non intendevo che come correzione stavo solo espandendo la tua risposta. –

1

Prova questa:

test(string: string ?? "", middleString: middleString ?? "", endString: endString ?? "") 
+1

Questa è una buona soluzione, ma solo se si desidera fornire argomenti predefiniti in _call time_, invece di aver costruito la funzione -in impostazioni predefinite. – justinpawela

1

Swift 3

ho scritto in questo modo:

in questo modo è possibile chiamare test() con o senza argomenti e ottenere i valori predefiniti se non viene fornito alcun parametro

+0

Ciò consente al chiamante di omettere i parametri e ottenere valori predefiniti.Quello che l'OP chiedeva era esplicitamente come usare un valore predefinito se nil è passato. –

0

Nota: non interpretare questi parametri facoltativi come ?, questo è un approccio diverso.

Parametri totalmente opzionali, cioè non utilizzare nemmeno durante il richiamo del metodo.

func doAddition(value1Name value1:Int = 0, value2Name value2:Int = 0, value3Name value3:Int = 0){ 
    print(value1+value2+value3) 
} 

Ora tutti i parametri sono facoltativi da aggiungere. chiama come ti piace,

doAddition(value1Name: 1) 
doAddition(value1Name: 1, value2Name: 2) 
doAddition(value3Name: 3) 
Problemi correlati