Swift: how to return class type from function

前端 未结 4 692
南方客
南方客 2021-02-03 20:08

I know it is possible to pass class type to a function in swift:

func setGeneric(type: T.Type){ }
setGeneric(Int.self)

But how we can

相关标签:
4条回答
  • 2021-02-03 20:30

    You can force the downcast (as!) as below

    func getGeneric<T>() -> T.Type {
      return Int.self as! T.Type
    } 
    

    But out of the function scope, you need to indicate the returned type:

    var t:Int.Type = getGeneric()
    
    0 讨论(0)
  • 2021-02-03 20:40

    It works when I modify your function like this:

    func getGeneric<T>(object: T) -> T.Type {
        return T.self
    }
    
    getGeneric(0)    // Swift.Int
    
    0 讨论(0)
  • 2021-02-03 20:41

    You can return any type you want.

    func getTypeOfInt()  -> Int.Type  { return Int.self  }
    func getTypeOfBool() -> Bool.Type { return Bool.self }
    

    If the type is not determined from arguments or if the return is constant, there is no need to introduce a generic T type.

    0 讨论(0)
  • 2021-02-03 20:46

    Yes, this is possible. The problem here is that you say your function returns a generic T.type, but you always return Int.type. Since T is not always an Int, the compiler raises an error.

    0 讨论(0)
提交回复
热议问题