How to pass a Swift type as a method argument?

前端 未结 1 1032
旧时难觅i
旧时难觅i 2020-12-24 12:58

I\'d like to do something like this:

func doSomething(a: AnyObject, myType: ????)
{
   if let a = a as? myType
   {
       //…
   }
}

In Ob

相关标签:
1条回答
  • 2020-12-24 13:42

    You have to use a generic function where the parameter is only used for type information so you cast it to T:

    func doSomething<T>(_ a: Any, myType: T.Type) {
        if let a = a as? T {
            //…
        }
    }
    
    // usage
    doSomething("Hello World", myType: String.self)
    

    Using an initializer of the type T

    You don’t know the signature of T in general because T can be any type. So you have to specify the signature in a protocol.

    For example:

    protocol IntInitializable {
        init(value: Int)
    }
    

    With this protocol you could then write

    func numberFactory<T: IntInitializable>(value: Int, numberType: T.Type) -> T {
        return T.init(value: value)
    }
    
    // usage
    numberFactory(value: 4, numberType: MyNumber.self)
    
    0 讨论(0)
提交回复
热议问题