簡體   English   中英

為對象Swift定義自定義類

[英]Define custom class for object 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一起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 )訪問任何特定的子類的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM