我有两个类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()
}