swift2 如何将Swift类型作为方法参数传递?

pu3pd22g  于 2022-11-06  发布在  Swift
关注(0)|答案(1)|浏览(210)

我想做这样的事情:

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

在Objective-C中,类的类是Class

cgfeq70w

cgfeq70w1#

您必须使用泛型函式,其中的参数仅用于型别信息,因此您必须将它转换为T

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

// usage
doSomething("Hello World", myType: String.self)

使用T类型的初始值设定项

一般来说,你不知道T的签名,因为T可以是任何类型的,所以你必须在协议中指定签名。
例如:

protocol IntInitializable {
    init(value: Int)
}

使用此协议,您可以编写

func numberFactory<T: IntInitializable>(value: Int, numberType: T.Type) -> T {
    return T.init(value: value)
}

// usage
numberFactory(value: 4, numberType: MyNumber.self)

相关问题