这是我的代码:
struct Algorithm {
let category: String = ""
let title: String = ""
let fileName: String = ""
}
let a = Algorithm(
自动填充功能显示唯一有效的初始值设定项:
但是我期待使用像
这样的隐式初始化器Algorithm(category: "", title: "", fileName: "")
这给出了错误:
传递给不带参数的调用的参数
甚至有screenshots on another issue that shows this call being successfully used。
我做错了什么?
答案 0 :(得分:5)
您提供了属性的默认值,这就是编译器不会添加默认初始化程序的原因。当您删除默认值时,您将得到您期望的结果:
struct Algorithm {
let category: String
let title: String
let fileName: String
}
答案 1 :(得分:4)
问题是let
。如果您使用var
声明属性,则会获得成员初始值设定项:
struct Algorithm {
var category: String = ""
var title: String = ""
var fileName: String = ""
}
let alg = Algorithm(category: "", title: "", fileName: "")
但是,由于您为所有属性提供了默认值,因此您无法获得let
属性的成员初始值设定项。规则是您为没有默认值的存储属性获取隐式成员初始值设定项,并为var
属性获取(假设您没有显式声明的初始化程序)。
答案 2 :(得分:1)
使用
struct Algorithm {
var category: String = ""
var title: String = ""
var fileName: String = ""
}
和自动填充功能会向您显示两种可能性