AFAIK, n.
consideri il seguente esempio:
typealias Height: Float
extension: Height {
}
Qui Height
non è un nuovo tipo, è solo un'etichetta per Float
quindi sei solo estendendo Float
. Se si dà un'occhiata a Dictionary
è public struct Dictionary<Key : Hashable, Value> : CollectionType, DictionaryLiteralConvertible
così che cosa si sarebbe cercando di raggiungere con
extension BeaconID {}
è l'aggiunta di una proroga per Dictionary
con specifici parametri generici.
quello che mi aspetterei che si dovrebbe essere capaci di fare è:
typealias BeaconID = Dictionary<Key: String, Value: NSObject>
ma che anche non compila e questo perché a Swift si può non typealias tipi parziali (in altre parole i tipi generici, senza tipi di parametri generici specifici. Per ulteriori informazioni, vedere here. Una soluzione possibile per typealiasing tipi generici che viene indicato di seguito la risposta che ho legato alla è
struct Wrapper<Key: Hashable, Value> {
typealias T = Dictionary<Key, Value>
}
typealias BeaconID = Wrapper<String, NSObject>.T
ma anche allora, quando si tenta di estendere BeaconID
, si ottiene un avviso del compilatore, che ottiene finalmente al cuore del problema:
"estensione vincolata deve essere dichiarato il tipo generico non specializzato 'Dizionario' con i vincoli previsti da un 'dove' la clausola"
ho cercato di ripulire il codice e in realtà ottenuto questo errore: 'estensione vincolato deve essere dichiarato sul tipo generico non specificato 'Dizionario' con vincoli specificati da un 'dove' cl ause' – BallpointBen
Sì, ho capito bene, puoi controllare la mia risposta completa qui sotto. In sostanza non sembra possibile estendere tipi generici specifici, solo quelli in cui i tipi generici non sono ancora stati impostati. – barndog
@Robert ciò che mi piacerebbe vedere in Swift 3 non sono solo i vincoli sui protocolli e l'ereditarietà, ma anche sui valori, quindi qualcosa come "estensione SomeEnum dove Self == .MyCase'. In questo modo la funzionalità potrebbe essere definita solo su casi enum specifici. – barndog