Swift:如何从函数返回类的types
我知道有可能将类types传递给swift中的函数:
func setGeneric<T>(type: T.Type){ } setGeneric(Int.self)
但是,我们如何从函数返回types? 写一些像
func getGeneric<T>() -> T.Type { return Int.self }
给编译器错误“Int与T不相同”。 那么是否有可能从一个快速函数返回types?
编辑
一些解释。 我有用于持久性的类(我正在使用Realm),我有类作为这个类的包装。 所有的包装器都从RealmClassWrapper
inheritance,它需要知道它实际包装的Realm类。 所以,让我们说我有这个领域模型:
class RealmTodo: RLMObject { dynamic var title = "" }
和我的包装晚餐类看起来像这样:
class RealmClassWrapper { private let backingModel: RLMObject //... func backingModelType<T>() -> T.Type{ fatalError("must be implemented") } }
和实际的包装:
class Todo: RealmClassWrapper { //some other properties func backingModelType<T>() -> T.Type{ return RealmTodo.self } }
你可以返回任何你想要的types。
func getTypeOfInt() -> Int.Type { return Int.self } func getTypeOfBool() -> Bool.Type { return Bool.self }
如果types不是由参数确定的,或者返回是不变的,则不需要引入通用的T
types。
它适用于我修改你的function,如下所示:
func getGeneric<T>(object: T) -> T.Type { return T.self } getGeneric(0) // Swift.Int
你可以强制downcast(如!)如下
func getGeneric<T>() -> T.Type { return Int.self as! T.Type }
但是在function范围之外,您需要指明返回的types:
var t:Int.Type = getGeneric()
是的,这是可能的。 这里的问题是你说你的函数返回一个通用的T.type
,但你总是返回Int.type
。 由于T并不总是一个Int,编译器会产生一个错误。