如何使用Swift struct隐式初始化器?

时间:2016-07-07 15:43:28

标签: swift

这是我的代码:

struct Algorithm {
    let category: String = ""
    let title: String = ""
    let fileName: String = ""
}

let a = Algorithm(

自动填充功能显示唯一有效的初始值设定项:

enter image description here

但是我期待使用像

这样的隐式初始化器
Algorithm(category: "", title: "", fileName: "")

这给出了错误:

  

传递给不带参数的调用的参数

甚至有screenshots on another issue that shows this call being successfully used

我做错了什么?

3 个答案:

答案 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 = ""
}

和自动填充功能会向您显示两种可能性