声明私有变量时出现Swift结构编译器错误

声明私有变量时出现Swift结构编译器错误,swift,struct,xcode12,Swift,Struct,Xcode12,我有一个非常简单的struct,它可以正常工作: struct Obligation { var date = Date() } let snapshotEntry = Obligation(date: Date()) 但是,如果我将一个私有变量添加到此结构中,我会在创建结构实例的行上得到一个编译错误,即传递给不带参数的调用的参数: struct Obligation { var date = Date() private var bla

我有一个非常简单的
struct
,它可以正常工作:

struct Obligation {
    
    var date = Date()
}

let snapshotEntry = Obligation(date: Date())
但是,如果我将一个私有变量添加到此结构中,我会在创建结构实例的行上得到一个编译错误,即
传递给不带参数的调用的参数

struct Obligation {
    
    var date = Date()
    
    private var blank:Bool = false
}

let snapshotEntry = Obligation(date: Date())

如果我从新的
blank
var中删除
private
,它编译得很好。
我是不是忽略了一些简单的事情?
struct
是否可以没有私有变量?

您不能使用默认的成员方式的
初始化器
使用
private
访问级别修饰符分配
struct的
属性。如果您需要使用
初始化器
分配私有属性,您必须编写自己的或给私有成员initiate值来解决它,正如文档中明确指出的那样:

将考虑结构类型的默认成员初始值设定项 如果结构的任何存储属性是私有的,则为私有。 同样,如果结构的任何存储属性是文件 private,初始值设定项为file private。否则,初始值设定项 具有内部的访问级别

只需使用自定义初始值设定项。

这应该可以:

struct Obligation {
    var date: Date
    private var blank: Bool
    
    init(date: Date = Date(), blank: Bool = false) {
       self.date = date
       self.blank = black
    }
}
    
let snapshotEntry = Obligation(date: Date())

我不想把它转让给私人财产。还是说我的默认值?这会否定整个成员智能初始化器吗?在初始化器中。。。给它一个defaut值