swift - 将成员标记为私有导致 Argument Passed to Call That Takes No Arguments
问题描述
编译:
struct Foo {
var g: Double = 5.0
}
struct Bar {
var h: Double = 5.0
var foo = Foo()
}
var bar = Bar(h: 6)
添加“private”并且不再编译,标题中有上述错误:
struct Foo {
var g: Double = 5.0
}
struct Bar {
var h: Double = 5.0
private var foo = Foo()
}
var bar = Bar(h: 6) // compiler error on this line
为什么会这样?
解决方案
这是因为对于一个结构,如果它的任何成员是私有的,则合成的成员 init 将是私有的。因此,您将获得一个不带参数的 init,因为所有属性都有默认值(如果至少一个非可选属性缺少默认值,则根本不会合成任何 init)。
来自 Swift 编程语言书
如果结构的任何存储属性是私有的,则结构类型的默认成员初始化器被认为是私有的。同样,如果结构的任何存储属性是文件私有的,则初始化程序是文件私有的。否则,初始化程序的访问级别为内部。
因此,在您的情况下,您将需要为您的结构编写自定义初始化
推荐阅读
- highcharts - 如何将月份作为 x 轴添加到股票图表/高点图表
- python - 使用 Python ping 网站时必须指定 IP 地址
- javascript - Input value not updating with custom input in react-admin
- java - Spring webflux WebClient logs 'Connection reset by peer'
- django - Docker 和 nginx 中的 Django 和 React 开发,错误的 MIME 类型错误
- app-store-connect - How to create a user in App Store Connect?
- c# - 插入多个数据时的问题 ASP.NET MVC
- javascript - 如何在文本框中将“&”更改为“&”?
- haskell - 具有多个参数的列表推导
- pandas - pandas 应用并返回多个值