type - ¿Puedo asignar un tipo predeterminado al tipo genérico T en Swift?
generic var swift (1)
Tengo una clase genérica que quiero poder usar con un tipo predeterminado. Ahora mismo puedo inicializarlo con cualquier tipo, pero tengo que ser explícito.
//Initialize with a type
MyManager<MyCustomerObject>()
// Initialize with NSObject (what I want to be my default type)
MyManager<NSObject>()
// This doesn''t work, but I want this kind of functionality
class MyManager<T = NSObject> {}
// So I can create my manager like so and it inserts the default type as NSObject
MyManager() //Or MyManager<>()
¿Es esto posible en Swift?
No, actualmente esto no es posible, aunque es parte del Manifiesto de genéricos , por lo que podría ser algo que el equipo Swift considerará para una versión futura del idioma.
Argumentos genéricos predeterminados
Los parámetros genéricos podrían tener la capacidad de proporcionar argumentos predeterminados, que se utilizarían en los casos en que el argumento de tipo no se especifique y la inferencia de tipo no pueda determinar el tipo de argumento. Por ejemplo:
public final class Promise<Value, Reason=Error> { ... } func getRandomPromise() -> Promise<Int, Error> { ... } var p1: Promise<Int> = ... var p2: Promise<Int, Error> = p1 // okay: p1 and p2 have the same type Promise<Int, Error> var p3: Promise = getRandomPromise() // p3 has type Promise<Int, Error> due to type inference
Mientras tanto, sin embargo, un compromiso algo insatisfactorio sería el uso de typealias
:
class MyManager<T> {}
typealias MyManagerDefault = MyManager<NSObject>
let defaultManager = MyManagerDefault()
No es tan simple como poder decir MyManager()
, pero aparece junto a MyManager
en autocompletar, lo cual es bastante útil.