2014-09-28 126 views
7

比方說,比如,你有下面的代碼:Swift - 使構造函數參數上的標籤可選?

struct SomeStruct { 
    init (arg1: String, arg2: Int){ 
      // Does Stuff with Variables 
    } 
} 

// Some Point Later 

var str = "fasfsad" 
var integer = 343 
let smth = SomeStruct(arg1: str, arg2: integer) 

是否有可能修改SomeStruct結構,使下面的代碼行是否合法?

let smth = SomeStruct(str, integer) 

回答

7

是的,你可以使參數匿名使用下劃線的外部參數名:

struct SomeStruct { 
    init (_ arg1: String, _ arg2: Int){ 
      // Does Stuff with Variables 
    } 
} 
+3

正確的,但在原始問題的措辭上分割頭髮:這不會在呼叫地點使參數標籤*可選* - 它要求呼叫者省略它們。函數/初始化程序聲明只是指定一種調用它的語法。如果您想爲多個選項提供呼叫者,請聲明多個初始化者。 – rickster 2014-09-28 20:57:43

+2

這是一個很好的觀點。如果初始化器是這樣定義的,'SomeStruct(arg1:str,arg2:integer)'不再是有效的調用。 – 2014-09-28 21:00:58

3

這裏是你如何能做到這一點:

struct A { 
    var a: String 
    var b: String 

    init(_ a: String,_ b: String) { 
     self.a = a 
     self.b = b 
    } 
} 

var x = A("S", "B")