Ios 基于在Swift中作为参数传递的类实现动态初始化
我想根据传递给函数的类创建对象 首先,我有一个接口,每个可生成的对象都应该符合:Ios 基于在Swift中作为参数传递的类实现动态初始化,ios,swift,Ios,Swift,我想根据传递给函数的类创建对象 首先,我有一个接口,每个可生成的对象都应该符合: interface Generatable{ init(raw: NSDictionary) } 以及一个将类作为参数的函数 func generateDynamicObjectFromClass(generatable: Generatable.Type){ var someJSONData : NSDictionary = NSDictionary() var myGenerat
interface Generatable{
init(raw: NSDictionary)
}
以及一个将类作为参数的函数
func generateDynamicObjectFromClass(generatable: Generatable.Type){
var someJSONData : NSDictionary = NSDictionary()
var myGeneratedObject : Generatable = generatable(raw: someJSONData) //custom initialiser of Generatable class
}
然后,这样称呼它:
generateDynamicObjectFromClass(MyGeneratableObject.Type)
MyGenerateableObject类
但是,MyGenerateableObject没有Type属性,因此问题是在运行时获取基础对象的相应类。可能吗 必须将
GeneratedDynamicObjectFromClass
定义为通用函数:
protocol Generatable {
init(raw: NSDictionary)
}
func generateDynamicObjectFromClass<T where T:Generatable>(generatable:T.Type, otherParam: NSString = "") -> T {
var someJSONData : NSDictionary = NSDictionary()
var myGeneratedObject = T(raw: someJSONData)
return myGeneratedObject
}
class MyGeneratableObject : NSObject, Generatable {
init(raw: NSDictionary){
println("MyGeneratableObject init")
}
}
var myObject1 = generateDynamicObjectFromClass(MyGeneratableObject.self, otherParam: "foo")
var myObject2 = generateDynamicObjectFromClass(MyGeneratableObject.self)
不需要单独的功能。答案很好,我在操场上测试了它,效果很好。我将如何使用多个参数执行此操作?对不起,我不太熟悉通用函数。。。假设我将函数更改为
func-generatedDynamicObjectFromClass(otherParam:NSString,generatable:T.Type)->T
(不起作用),我将如何编写它?@评论家:请参阅更新的答案。实际上,MyGeneratableObject.self
是引用类型的正确方法(据我所知)。我不知道为什么第一个版本可以工作。好吧,太棒了,还有最后一件事:我如何使这个参数成为可选的?我试图在T之后添加一个问号。输入参数,但它不允许我通过nil。有什么想法吗?@评论家:我再次更新了答案。这里记录了可选参数:。好的,但我的意思是可生成的
参数应该为零,而不是其他参数
protocol Generatable {
init(raw: NSDictionary)
}
func generateDynamicObjectFromClass<T where T:Generatable>(generatable:T.Type, otherParam: NSString = "") -> T {
var someJSONData : NSDictionary = NSDictionary()
var myGeneratedObject = T(raw: someJSONData)
return myGeneratedObject
}
class MyGeneratableObject : NSObject, Generatable {
init(raw: NSDictionary){
println("MyGeneratableObject init")
}
}
var myObject1 = generateDynamicObjectFromClass(MyGeneratableObject.self, otherParam: "foo")
var myObject2 = generateDynamicObjectFromClass(MyGeneratableObject.self)
var myObject = MyGeneratableObject(raw: NSDictionary())