2014-09-28 72 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")