2016-07-07 125 views
1

这里是我的代码:如何使用Swift结构隐式初始值设定项?

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

let a = Algorithm(

自动完成显示的唯一有效的初始化:

enter image description here

但我期待使用隐式初始化像

Algorithm(category: "", title: "", fileName: "") 

这给出了错误:

Argument passed to call that takes no arguments

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

我在做什么错?

+1

@MartinR不,它不是。如果他使用'var',即使使用初始值,他也会获得成员初始值设定项。 – matt

回答

3

的问题是let。如果您有var声明你的财产,你会得到按成员初始化:

struct Algorithm { 
    var category: String = "" 
    var title: String = "" 
    var fileName: String = "" 
} 
let alg = Algorithm(category: "", title: "", fileName: "") 

但既然你提供的默认值,所有的属性,你没有得到按成员初始化为let性能。规则是,您可以获得隐含的成员初始值设定项,以存储没有默认值的属性和var属性(前提是您没有显式声明的初始值设定项)。

5

您提供了属性的默认值,这就是为什么编译器不会添加默认的初始化程序的原因。当您删除默认值,你会得到你期待什么:

struct Algorithm { 
    let category: String 
    let title: String 
    let fileName: String 
} 
1

使用

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

,并自动完成会告诉你两种可能性

相关问题