这是我的代码:
struct Algorithm {
let category: String = ""
let title: String = ""
let fileName: String = ""
}
let a = Algorithm(
Run Code Online (Sandbox Code Playgroud)
自动填充功能显示唯一有效的初始值设定项:
但我期待使用隐式初始化器
Algorithm(category: "", title: "", fileName: "")
Run Code Online (Sandbox Code Playgroud)
这给出了错误:
传递给不带参数的调用的参数
甚至还有另一个问题的屏幕截图显示此调用已成功使用.
我究竟做错了什么?
您提供了属性的默认值,这就是编译器不会添加默认初始化程序的原因.删除默认值后,您将获得所期望的内容:
struct Algorithm {
let category: String
let title: String
let fileName: String
}
Run Code Online (Sandbox Code Playgroud)
问题是let. 如果您使用 声明您的属性var,您将获得成员初始化器:
struct Algorithm {
var category: String = ""
var title: String = ""
var fileName: String = ""
}
let alg = Algorithm(category: "", title: "", fileName: "")
Run Code Online (Sandbox Code Playgroud)
但是由于您为所有属性提供了默认值,因此您不会获得let属性的成员初始化器。规则是您为没有默认值的存储属性和var属性(假设您没有显式声明的初始化程序)获得隐式成员初始化程序。