Swift继承(扩展类)



我有两个类ClassA、ClassB、ClassC和ClassC是从ClassA 扩展而来的

open class classA: NSObject{
var firstName = String()
var lastName = String()
}
open class classB: NSObject{
public func getObject(dictionary : Dictionary<String,Any>) -> Dictionary<String,Any>{
var Dict : [String: Any] = [:]
var ListArray = Array<Any>()
let tempArray = dictionary["data"] as! Array<Any>

for item in 0..<tempArray.count{
let dict = tempArray[item] as! NSMutableDictionary
let myclass = classA()

if let val = dict["firstName"] as? String{
myclass.firstName = val
}else if let val =  dict["lastName"] as? String{
myclass.lastName = val
}
ListArray.append(myclass)
}
Dict["data"] = ListArray

return Dict
}

}

如果我像这个一样扩展ClassC

public ClassC : ClassA{
var age = String()
var address = String()
}

有什么方法可以在B类函数getObjects中使用这个ClassC变量吗?我无法将ClassC变量移动到ClassA。有谁能帮我做到这一点吗。

提前感谢。

您可以使用类型作为值并将其作为参数传递:

class ClassB {
func someFunc(A: ClassA.Type) {
let classA = A.init(f: "firstName", l: "lastName")
print(classA)
}
}

你必须通过这样的类型:

let b = ClassB()
b.someFunc(A: ClassA.self)

Swift的多态性在这里适用,这意味着即使你通过了ClassC,它也会被允许:

let b = ClassB()
b.someFunc(A: ClassC.self)

您必须拥有子类所需的初始值设定项:

open class ClassA: NSObject{
var firstName: String?
var lastName: String?
required public init(f: String = "", l: String = "") {
self.firstName = f
self.lastName = l
}
}
class ClassC : ClassA {
var age = String()
var address = String()
}

最新更新