为什么我不能将指定的初始化程序放入 class 的扩展中?
Why I cannot place a designated initliazer in to a extension of a class?
当我将指定的初始化程序放入结构的扩展中时,它工作正常(请参见下面的示例)
struct BaseOne {
var a = 12
var b = 22
}
extension BaseOne {
init(a: Int){
self.a = a
self.b = 231
}
}
但是,当我为 class 执行此操作时,事情开始出错了
class BaseOne {
var a = 12
var b = 22
}
extension BaseOne {
init(a: Int){ // Error message poped up here
self.a = a
self.b = 231
}
}
有人可以为我解释一下吗?
谢谢
这是因为 swift 在使用结构时会自动为您生成初始值设定项。所以这是有效的
struct BaseOneStruct {
var a: Int
var b: Int
}
let a = BaseOne(a: 12, b: 32)
即使没有初始化器。 类 但是不要为你做这个。为了让你的代码工作,你必须做这样的事情
class BaseOneClass {
var a = 12
var b = 22
init() { }
}
extension BaseOneClass {
convenience init(a: Int){
self.init()
self.a = a
self.b = 231
}
}
另请注意,您可以使用空的 init BaseOneStruct(),因为您在定义时为变量设置了值
来自文档
class 的所有指定初始化器必须写在 class 定义本身中,而不是在扩展中,因为完整的指定初始化器集是接口契约的一部分class class.
的子class
编辑:文档 link
https://github.com/apple/swift/blob/master-next/docs/ObjectInitialization.rst
当我将指定的初始化程序放入结构的扩展中时,它工作正常(请参见下面的示例)
struct BaseOne {
var a = 12
var b = 22
}
extension BaseOne {
init(a: Int){
self.a = a
self.b = 231
}
}
但是,当我为 class 执行此操作时,事情开始出错了
class BaseOne {
var a = 12
var b = 22
}
extension BaseOne {
init(a: Int){ // Error message poped up here
self.a = a
self.b = 231
}
}
有人可以为我解释一下吗?
谢谢
这是因为 swift 在使用结构时会自动为您生成初始值设定项。所以这是有效的
struct BaseOneStruct {
var a: Int
var b: Int
}
let a = BaseOne(a: 12, b: 32)
即使没有初始化器。 类 但是不要为你做这个。为了让你的代码工作,你必须做这样的事情
class BaseOneClass {
var a = 12
var b = 22
init() { }
}
extension BaseOneClass {
convenience init(a: Int){
self.init()
self.a = a
self.b = 231
}
}
另请注意,您可以使用空的 init BaseOneStruct(),因为您在定义时为变量设置了值
来自文档
class 的所有指定初始化器必须写在 class 定义本身中,而不是在扩展中,因为完整的指定初始化器集是接口契约的一部分class class.
的子class编辑:文档 link
https://github.com/apple/swift/blob/master-next/docs/ObjectInitialization.rst