为对象 Swift 定义自定义类



例如,我有一个BaseObject类:

class BaseObject: NSObject {
    let id:UInt64
}

以及此对象的管理器类:

public class Manager: NSObject {
    public var objs:[BaseObject] = []
    public func addObj(obj:BaseObject) {
        ...
    }
}

我想创建一个库,并允许开发人员设置他自己的类,该类应该从Base Object

例如:

class MyOwnBaseObject: BaseObject {
   var ownProperty:Int = 0
}
var manager = Manager();
manager.objClass = MyOwnBaseObject

manager.objs现在应该返回:[MyOwnBaseObject]manager.addObj()应该与MyOwnBaseObject一起工作

这可能吗?

如果希望返回类型是指定的子类,则可以使用泛型:

public class BaseObject: NSObject {
    let id:UInt64 = 0
}
public class MyOwnBaseObject: BaseObject {
    var ownProperty:Int = 0
}
public class Manager<T>: NSObject {
    public var objs:[T] = []
    public func addObj(obj:T) {
        objs.append(obj)
    }
}
var manager = Manager<BaseObject>()
let ob1 = BaseObject()
manager.addObj(obj: ob1)
let ob2 = BaseObject()
manager.addObj(obj: ob2)
var otherManager = Manager<MyOwnBaseObject>()
let ownOb1 = MyOwnBaseObject()
otherManager.addObj(obj: ownOb1)
let ownOb2 = MyOwnBaseObject()
otherManager.addObj(obj: ownOb2)

print(manager.objs)    // objs is of type [BaseObject]
print(otherManager.objs)   // objs is of type [MyOwnBaseObject]

如果没有泛型,您的代码仍然可以工作,但您需要将objs返回的任何对象强制转换为自定义类(例如 MyOwnBaseObject (,以访问任何特定于子类的属性。

最新更新