声明私有变量时出现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值