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

Wil*_*ken 1 swift

这是我的代码:

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)

这给出了错误:

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

甚至还有另一个问题的屏幕截图显示此调用已成功使用.

我究竟做错了什么?

Gre*_*reg 5

您提供了属性的默认值,这就是编译器不会添加默认初始化程序的原因.删除默认值后,您将获得所期望的内容:

struct Algorithm {
    let category: String
    let title: String
    let fileName: String
}
Run Code Online (Sandbox Code Playgroud)


mat*_*att 5

问题是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属性(假设您没有显式声明的初始化程序)获得隐式成员初始化程序。