2015-05-21 16 views
7

Swift'de değişken bir parametrenin isteğe bağlı olması mümkün mü?Swift'de isteğe bağlı olarak bir variadic (ellipsis) parametresi nasıl belirtilir?

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

} 

veya

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

} 

Not: Ben duygusu ve ne derleme yapılmış iki yol denedik

if let queryFormatUnwrapped = queryFormat { 
... 
} 

You: 1 uygulama teknik olarak derler ama bunu paketini denerseniz İsteğe bağlı Dizeler Dizisi olarak değil, isteğe bağlı Dizgiler Dizisi olarak (bu bir çeşit saçmadır) bir hata olarak gösterilmesini sağlayan bir hata Bound value in a conditional binding must be of Optional Type olsun.

+0

Dizinin boş olup olmadığını kontrol edermisiniz? – Tobias

+0

@ABakerSmith "queryFormat" işlevini açmayı denediğimde, isteğe bağlı dizeler dizisi olarak değil, isteğe bağlı dizeler dizisi olarak işlendiğini gösteren bir hata atar. – Shizam

+0

@Tobias'ın önerdiği gibi, _entire parametresi pack_ opsiyonunu yapmanın bir yolu yoktur. Bu ne anlama geliyor? Kullanıcı, bir diziye ulaşan sıfır veya daha fazla argüman sağlayabilir. Bu dizi nasıl/isteğe bağlı olabilir? Diğer taraftan, _themselves_ parametreleri isteğe bağlı olabilir. –

cevap

12

İsteğe bağlı bir değişkenlik parametresine sahip olmak mümkün değildir. İşlev, her zaman variadic parametresi için bir dizi alır. Bununla birlikte, dizi boş olabilir veya dizideki değerler geçersiz olabilir.

Bazı örnek kodları birlikte attım, umarım söylemeye çalıştığım şeyi iletir.

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 
! 
*/ 
İlgili konular