如何解决声明私有变量时的Swift结构编译器错误
我有一个非常简单的struct
,它可以按预期工作:
struct Obligation {
var date = Date()
}
let snapshotEntry = Obligation(date: Date())
但是,如果我向此结构添加私有var,则在创建结构实例时说Argument passed to call that takes no arguments
的行上会出现编译错误:
struct Obligation {
var date = Date()
private var blank:Bool = false
}
let snapshotEntry = Obligation(date: Date())
如果我从新的private
变量中删除了blank
,则可以正常编译。
我在这里忽略了一些简单的事情吗? struct
可以没有私有变量吗?
解决方法
您不能使用默认的成员明智的initialiser
来通过struct's
访问级别修饰符来分配private
属性。如果您需要使用initializer
来分配私有属性,必须自己编写或给私有成员初始化值才能解决
Access Control文档明确指出:
考虑结构类型的默认成员初始化器 如果该结构的任何存储属性为私有,则为私有。 同样,如果任何结构的存储属性是文件 私有,初始化器是文件私有的。否则,初始化器 具有内部访问级别。
只需使用自定义初始化程序即可。
,这应该有效:
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())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。