首页 > 解决方案 > 是否有可能有一个能够排除具有初始值的属性的默认结构初始化程序?

问题描述

我有以下结构。

struct Checklist : Codable {
    let id: Int64
    var text: String?
    var checked: Bool
    var visible: Bool = false
    var focused: Focused? = nil
    var version: Int64 = 0

    private enum CodingKeys: String, CodingKey {
        case id
        case text
        case checked
    }
}

我希望我可以通过使用来构建它

var checklist = Checklist(id: 1, text: nil, checked: true)

我注意到这会导致我编译器错误

在没有更多上下文的情况下,表达式的类型是模棱两可的

我需要通过显式提供初始化程序来解决这个问题。

struct Checklist : Codable {
    let id: Int64
    var text: String?
    var checked: Bool
    var visible: Bool = false
    var focused: Focused? = nil
    var version: Int64 = 0

    private enum CodingKeys: String, CodingKey {
        case id
        case text
        case checked
    }

    init(id: Int64, text: String?, checked: Bool) {
        self.id = id
        self.text = text
        self.checked = checked
    }
}

我想知道,是否有可能拥有一个自动默认初始化程序。它应该能够排除所有具有默认值的属性visiblefocused和)?version

因此,我不需要明确提供初始化程序。(更少的代码,不需要维护我们自己的初始化器,更少可能的错误)

标签: iosswift

解决方案


推荐阅读