swift - 可选值和默认值需要使用默认初始值设定项进行初始化

标签 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 }

但我发现这个语言要求非常麻烦且过于冗长。有没有办法实现强制字段的初始化而不添加构造函数?

最佳答案

您可以使用某些参数的默认值定义初始值设定项

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

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)

Usually is a good practice writing the default value of a property on the same line where it is defined (as you did). I moved the default value of b from it's definition to the init just to make this example shorter.

关于swift - 可选值和默认值需要使用默认初始值设定项进行初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39684097/

相关文章:

ios - 如何在 swift UIView 类中设置新的 y 位置 ImageView

Swift tableView cellForRowAt 获取数组的 subKeyName 的数组

objective-c - 存档中的 Swift 编译器错误

ios - 奇怪的行为设置 tableView 行高和滚动位置 Swift

ios - 每次 NSTimer 递减时播放一次音频文件?

ios - Swift UIView 不透明度编程

swift - OpenGL ES 正交投影矩阵不起作用

Swift:在 Mac 上检索文件图标时出现问题

ios - 打开包含今天扩展程序的应用程序时崩溃

ios - 从按钮删除 TableView 中的一行