在使用Swift类时出现错误。当我尝试创建这样的新对象
let prod_obj = Produs(nume: nume_prod, cod_bare: cod_ext)
我收到错误“传递给调用的参数不带参数”,我也不知道为什么。我已经阅读了一些文档,这与他们的使用方法完全相同。这是我班的样子:
class Produs {
var nume: String!
var cod_bare: String!
}
我想我可能需要添加一个初始化程序,但是我不明白为什么这对我来说是必要的。
答案 0 :(得分:2)
从Swift书的Structures and Classes章开始:
结构类型的成员级初始化程序 所有结构都有一个自动生成的成员初始化器,您可以使用该初始化器来初始化新结构实例的成员属性。可以通过名称将新实例的属性的初始值传递给成员初始化器:
let vga = Resolution(width: 640, height: 480)
与结构不同,类实例不会接收默认的逐成员初始化器。初始化程序中会详细描述初始化程序。
您的课程没有初始化程序,除了没有参数的默认初始化程序之外。
要么通过两个参数添加所需的初始化程序,要么将您的类更改为结构。
答案 1 :(得分:2)
您可以使用Struct来获取合成的init,就像这样
#install.packages("lintr")
lintr::lint("/path/to/file/Report.Rmd")
对于一个类,您可以提供一个初始化程序:
struct Produs {
let nume: String
let codBare: String
}
let prodObj = Produs(nume: numeProd, codBare: codBare)
或
class Produs {
var nume: String
var codBare: String
init (nume: String, codBare: String) {
self.nume = nume
self.codBare = codBare
}
}
let prodObj = Produs(nume: numeProd, codBare: codBare)
注意:避免在变量名中使用下划线,而使用诸如class Produs {
var nume: String!
var codBare: String!
}
let prodObj = Produs()
prodObj.nume = numeProd
prodObj.codBare = codBare
之类的camelCase
答案 2 :(得分:0)
仅在结构上获得带有参数的合成init
。在类上,如果提供属性的默认值,则会得到init()
,否则必须实现它。