used type parameter only not inferred has generic functions extension could constraint closure because associated swift generics

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.