2015-05-21 27 views
7

È possibile avere un parametro variadico facoltativo in Swift? Ho provato le due vie che avesse senso e né di compilazione:Come specificare un parametro variadic (ellissi) come opzionale in Swift?

func myFunc(queryFormat: String?...) { 

} 

o

func myFunc(queryFormat: String...?) { 

} 

Nota: La prima implementazione compila tecnicamente, ma se si prova a scartarlo:

if let queryFormatUnwrapped = queryFormat { 
... 
} 

È ottenere un errore Bound value in a conditional binding must be of Optional Type che indica a me il suo trattamento come una matrice di stringhe facoltative non una matrice opzionale di stringhe (che è una specie di sciocco).

+0

Vuoi controllare se l'array era vuoto? – Tobias

+0

@ABakerSmith Se tento di scartare 'queryFormat', genera un errore che indica che lo tratta come una matrice di stringhe facoltative non una serie opzionale di stringhe. – Shizam

+0

Come suggerisce @Tobias, non c'è modo di rendere _entire parameter pack_ opzionale. Cosa significherebbe? L'utente può fornire zero o più argomenti, che arrivano in un array. Come/perché quell'array sarebbe opzionale? D'altra parte, i parametri _themselves_ possono essere facoltativi. –

risposta

12

Non è possibile avere un parametro variadico opzionale. La funzione riceverà sempre una matrice per il parametro variadic.

Tuttavia, la matrice può essere vuota oppure i valori nella matrice possono essere nulli.

Ho buttato un po 'di codice di esempio, spero che aiuti a comunicare quello che sto cercando di dire.

func vardicPrint(strings: String...) { 
    if strings.isEmpty { 
     print("EMPTY") 
    } else { 
     for string in strings { 
      print(string) 
     } 
    } 
} 

func optionalPrint(maybeStrings: String?...) { 
    if maybeStrings.isEmpty { 
     print("EMPTY") 
    } else { 
     for string in maybeStrings { 
      if let string = string { 
       print(string) 
      } else { 
       print("nil") 
      } 

     } 
    } 
} 

vardicPrint("Hello", "World", "!") 
vardicPrint() 


var nilString: String? 
optionalPrint("Goodbye", nil, "World", "!") 

/* OUTPUT: 
Hello 
World 
! 
EMPTY 

Goodbye 
nil 
World 
! 
*/ 
Problemi correlati