"Argument passed to call that takes no arguments" 创建对象时
"Argument passed to call that takes no arguments" when creating an object
我在使用 Swift class 时出错。当我尝试像这样创建一个新对象时
let prod_obj = Produs(nume: nume_prod, cod_bare: cod_ext)
我收到错误 "Argument passed to call that takes no arguments",但我不知道为什么。我读过一些文档,这与他们的做法完全相同。这是我的 class 的样子:
class Produs {
var nume: String!
var cod_bare: String!
}
我想我可能需要添加一个初始值设定项,但我不明白为什么在我的情况下有必要这样做。
您得到的合成 init
仅在结构上带有参数。在 类 上,如果您为属性提供默认值,您将获得 init()
,否则您必须实现它。
来自 Swift 书的 Structures and Classes 章节:
Memberwise Initializers for Structure Types
All structures have an automatically generated memberwise initializer, which you can use to initialize the member properties of new structure instances. Initial values for the properties of the new instance can be passed to the memberwise initializer by name:
let vga = Resolution(width: 640, height: 480)
Unlike structures, class instances don’t receive a default memberwise initializer. Initializers are described in more detail in Initialization.
您的 class 除了没有参数的默认初始化器外,没有其他初始化器。
使用两个参数添加所需的初始值设定项,或者将 class 更改为结构。
你可以像这样使用一个结构体得到合成的init
struct Produs {
let nume: String
let codBare: String
}
let prodObj = Produs(nume: numeProd, codBare: codBare)
对于 class,您可以提供一个初始值设定项:
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
注意:避免在变量名中使用下划线,使用驼峰式命名,例如codBare
我在使用 Swift class 时出错。当我尝试像这样创建一个新对象时
let prod_obj = Produs(nume: nume_prod, cod_bare: cod_ext)
我收到错误 "Argument passed to call that takes no arguments",但我不知道为什么。我读过一些文档,这与他们的做法完全相同。这是我的 class 的样子:
class Produs {
var nume: String!
var cod_bare: String!
}
我想我可能需要添加一个初始值设定项,但我不明白为什么在我的情况下有必要这样做。
您得到的合成 init
仅在结构上带有参数。在 类 上,如果您为属性提供默认值,您将获得 init()
,否则您必须实现它。
来自 Swift 书的 Structures and Classes 章节:
Memberwise Initializers for Structure Types All structures have an automatically generated memberwise initializer, which you can use to initialize the member properties of new structure instances. Initial values for the properties of the new instance can be passed to the memberwise initializer by name:
let vga = Resolution(width: 640, height: 480)
Unlike structures, class instances don’t receive a default memberwise initializer. Initializers are described in more detail in Initialization.
您的 class 除了没有参数的默认初始化器外,没有其他初始化器。
使用两个参数添加所需的初始值设定项,或者将 class 更改为结构。
你可以像这样使用一个结构体得到合成的init
struct Produs {
let nume: String
let codBare: String
}
let prodObj = Produs(nume: numeProd, codBare: codBare)
对于 class,您可以提供一个初始值设定项:
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
注意:避免在变量名中使用下划线,使用驼峰式命名,例如codBare