Swift:如何从函数返回类类型

Nik*_*pov 33 generics ios swift

我知道可以将类类型传递给swift中的函数:

func setGeneric<T>(type: T.Type){ }
setGeneric(Int.self)
Run Code Online (Sandbox Code Playgroud)

但是我们如何从函数中返回类型呢?写点像

func getGeneric<T>() -> T.Type {
   return Int.self
}
Run Code Online (Sandbox Code Playgroud)

给出编译器错误"Int与T不相同".那么可以从快速函数返回类型吗?

编辑
一些解释.我有用于持久化的类(我正在使用Realm),我有一些类充当这个类的包装器.所有包装器都继承了RealmClassWrapper需要知道它实际包含的Realm类.那么就说我有这个领域模型:

class RealmTodo: RLMObject {
   dynamic var title = ""
}
Run Code Online (Sandbox Code Playgroud)

我的包装器晚餐类看起来像这样:

class RealmClassWrapper {
   private let backingModel: RLMObject
   //...
   func backingModelType<T>() -> T.Type{ fatalError("must be implemented") }
}
Run Code Online (Sandbox Code Playgroud)

和实际的包装:

class Todo: RealmClassWrapper {
   //some other properties
   func backingModelType<T>() -> T.Type{ return RealmTodo.self }
}
Run Code Online (Sandbox Code Playgroud)

GoZ*_*ner 31

您可以返回任何您想要的类型.

func getTypeOfInt()  -> Int.Type  { return Int.self  }
func getTypeOfBool() -> Bool.Type { return Bool.self }
Run Code Online (Sandbox Code Playgroud)

如果类型不是从参数确定的,或者返回是常量,则不需要引入泛型T类型.


aya*_*aio 8

当我修改你的函数时,它可以工作:

func getGeneric<T>(object: T) -> T.Type {
    return T.self
}

getGeneric(0)    // Swift.Int
Run Code Online (Sandbox Code Playgroud)

  • 谢谢您的回答!但是,您的示例检查对象并返回其类型,但我想创建一个没有输入参数并返回指定类型的函数(如我的示例中所示)。 (3认同)
  • 我不明白你想要实现的目标.你不想要任何参数?你希望函数返回什么?总是相同的类型? (2认同)