我想做这样的事情:
func doSomething(a: AnyObject, myType: ????) { if let a = a as? myType { //… } }
在Objective-C中,类的类是Class
Class
cgfeq70w1#
您必须使用泛型函式,其中的参数仅用于型别信息,因此您必须将它转换为T:
T
func doSomething<T>(_ a: Any, myType: T.Type) { if let a = a as? T { //… } } // usage doSomething("Hello World", myType: String.self)
一般来说,你不知道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)
1条答案
按热度按时间cgfeq70w1#
您必须使用泛型函式,其中的参数仅用于型别信息,因此您必须将它转换为
T
:使用
T
类型的初始值设定项一般来说,你不知道
T
的签名,因为T
可以是任何类型的,所以你必须在协议中指定签名。例如:
使用此协议,您可以编写