为什么我不能绕过下面代码中b
和c
的初始化:
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 }
但我发现这种语言要求非常繁琐且过于冗长。有没有办法在不添加构造函数的情况下实现必需字段 的初始化?
答案 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
,只是为了缩短这个例子。