是否可以隐式传递self
作为inout
参数来修改参考变量?Swift作为inout参数隐式传递自身作为参考类型
这是一种可以将抽象基类转换为其具体子类之一的方法。我的问题是,我是否必须始终有第一个论点,obj: inout AbstractBaseClass
,或者我可以隐含地通过自我。我意识到这也可以表示为静态方法。
func convertTo(_ obj: inout AbstractBaseClass, _ type: ConcreteClassTypes) {
switch type {
case .concreteClass1: obj = ConreteClass1()
case .concreteClass2: obj = ConcreteClass2()
}
}
下面是完整的代码:
class AbstractClass {
enum ConcreteType {
case concreteClass1
case concreteClass2
}
var id: Int = 0
fileprivate init() { }
func convert(_ obj: inout AbstractClass, to type: ConcreteType) {
let oldId = obj.id
switch type {
case .concreteClass1: obj = ConcreteClass1()
case .concreteClass2: obj = ConcreteClass2()
}
obj.id = oldId
}
class ConcreteClass1: AbstractClass {
override init() { super.init() }
}
class ConcreteClass2: AbstractClass {
override init() { super.init() }
}
}
var obj: AbstractClass = AbstractClass.ConcreteClass1()
obj.convert(&obj, to: .concreteClass2) //is there any way to eliminate this first argument?
“*它可以将抽象基类转换为其具体子类之一*” - 为什么您有抽象基类的实例开始?你通常不想首先实例化一个抽象类。 – Hamish