需要使用默认初始化程序初始化可选和默认值

时间:2016-09-25 06:30:50

标签: swift

为什么我不能绕过下面代码中bc的初始化:

struct Token {
    var a: Int
    var b: Int = -1
    var c: Int?
}

let t1 = Token(a: 1, b: 2, c: 0) // works of course
let t2 = Token(a: 1) // doesn't work :-(

我找到的唯一方法是在struct中添加一个带有唯一必需参数的init:

init(a: Int) { self.a = a }

但我发现这种语言要求非常繁琐且过于冗长。有没有办法在不添加构造函数的情况下实现必需字段 的初始化?

1 个答案:

答案 0 :(得分:3)

您可以使用某些参数

的默认值定义初始值设定项
struct Token {
    var a: Int
    var b: Int
    var c: Int?

    init(a: Int, b: Int = -1, c: Int? = nil) {
        self.a = a
        self.b = b
        self.c = c
    }
}

现在您可以通过多种方式创建令牌

Token(a: 1) // (1, -1, nil)
Token(a: 1, b: 2) // (1, 2, nil)
Token(a: 1, c: 3) // (1, -1, 3)
Token(a: 1, b: 2, c: 3) // (1, 2, 3)
  

通常情况下,将属性的默认值写在定义它的同一行(就像您所做的那样)是一种很好的做法。我将b的默认值从它的定义移到了init,只是为了缩短这个例子。