我正在尝试创建一个继承自NSObject的类,只能在给定所需参数的情况下对其进行初始化。我可以这样做:
class MyTestClass: NSObject {
var myTestValue: String
var myTestValue2: String
var myTestValue3: String
private override init() {
myTestValue = ""
myTestValue2 = ""
myTestValue3 = ""
super.init()
}
init(value: String, value2: String, value3: String) {
myTestValue = value
myTestValue2 = value2
myTestValue3 = value3
super.init()
}
}
有没有更好的方法来实现这一点而无需复制类变量的初始化?
显然,选项是一个选项,但我不想走那条路。有什么建议可以更简洁的方式实现同样的目标吗?
答案 0 :(得分:1)
如果我理解正确,您是否只想使用初始化程序参数中给出的值来初始化此类的对象?
这样就够了吗?
import Foundation
class MyTestClass: NSObject {
let myTestValue: String
let myTestValue2: String
let myTestValue3: String
init(myTestValue: String, myTestValue2: String, myTestValue3: String) {
self.myTestValue = myTestValue
self.myTestValue2 = myTestValue2
self.myTestValue3 = myTestValue3
super.init()
}
}
//...
MyTestClass() //Disallowed
不带参数调用会出现此错误:
ERROR at line 16, col 12: missing argument for parameter 'value' in call
MyTestClass()
^
INFO at line 8, col 5: 'init(value:value2:value3:)' declared here
init(value: String, value2: String, value3: String) {
^
Swift为任何结构或类提供默认初始值设定项,为其所有属性提供默认值,不提供至少一个初始化程序。默认初始值设定项只是创建一个新实例,其所有属性都设置为默认值。
根据您的需要,您还可以使用结构。如果没有提供其他初始值设定项,则它们提供成员智能初始值设定项:
struct MyTestStruct {
let myTestValue: String
let myTestValue2: String
let myTestValue3: String
}
// Implicit member-wise initializer:
_ = MyTestStruct(myTestValue: "a", myTestValue2: "b", myTestValue3: "c")