如果将以下结构更改为class,如何初始化:-
protocol P {
init()
init(str: String)
}
extension P {
init() {
self.init(str: "some default")
}
}
struct S : P {
var str: String
}
let s = S()
print(s.str) // prints - some default
我尝试添加默认的逐成员初始化器(更改为类后):-
class S : P {
var str: String
init() {
self.init(str: String)
}
}
它显示错误:- 错误:类型“ S”不符合协议“ P”类S:P。还有其他错误。如果将struct更改为class,如何完成初始化?
答案 0 :(得分:0)
只需为非最终类别指定required
。
如果您学习这些概念可能会有所帮助,Swift文档会有所帮助。
class S : P {
required init() {}
required init(str: String) {}
}
答案 1 :(得分:0)
类S
需要一个初始化程序来初始化str
!结构本身会生成此初始化程序,但是您必须为类编写它!
required init(str: String) {
self.str = str
}
答案 2 :(得分:0)
类没有默认的初始化程序。您只需要编写默认实现未提供的代码即可:
class S : P {
var str: String
required init(str: String) { self.str = str }
}
对于非required
类,这里需要 final
,因为所有子类也必须实现此方法。 final
类不是必需的:
final class S : P {
var str: String
init(str: String) { self.str = str }
}