types - sumar - ¿Cómo pasar un tipo Swift como argumento de método?
sumar dos numeros en xcode (1)
Me gustaría hacer algo como esto:
func doSomething(a: AnyObject, myType: ????)
{
if let a = a as? myType
{
//…
}
}
En Objective-C la clase de clase era Class
Tienes que usar una función genérica donde el parámetro solo se usa para información de tipo, así que lo conviertes en T
:
func doSomething<T>(_ a: Any, myType: T.Type) {
if let a = a as? T {
//…
}
}
// usage
doSomething("Hello World", myType: String.self)
Usando un inicializador del tipo T
No conoces la firma de T
en general porque T
puede ser de cualquier tipo. Así que tienes que especificar la firma en un protocolo.
Por ejemplo:
protocol IntInitializable {
init(value: Int)
}
Con este protocolo puedes escribir
func numberFactory<T: IntInitializable>(value: Int, numberType: T.Type) -> T {
return T.init(value: value)
}
// usage
numberFactory(value: 4, numberType: MyNumber.self)