Come si crea un'istanza di un tipo in modo dinamico in base a un valore di ricerca in un dizionario in Swift?Creare un oggetto Swift da un dizionario
5
A
risposta
4
Speriamo che questo sia utile per gli altri. Ci sono volute alcune ricerche per capirlo. L'obiettivo è evitare l'anti-pattern delle istruzioni if o switch giganti per creare ogni tipo di oggetto da un valore.
class NamedItem : CustomStringConvertible {
let name : String
required init() {
self.name = "Base"
}
init(name : String) {
self.name = name
}
var description : String { // implement Printable
return name
}
}
class File : NamedItem {
required init() {
super.init(name: "File")
}
}
class Folder : NamedItem {
required init() {
super.init(name: "Folder")
}
}
// using self to instantiate.
let y = Folder.self
"\(y.init())"
let z = File.self
"\(z.init())"
// now put it in a dictionary.
enum NamedItemType {
case Folder
case File
}
var typeMap : [NamedItemType : NamedItem.Type] = [.Folder : Folder.self,
.File : File.self]
let p = typeMap[.Folder]
"\(p!.init())"
let q = typeMap[.File]
"\(q!.init())"
aspetti interessanti:
- uso di "necessaria" per inizializzatori
- uso di .Type per ottenere il tipo per il valore di dizionario.
- uso di .self per ottenere la "classe" che può essere istanziata
- uso di() per istanziare l'oggetto dinamico.
- uso del protocollo stampabile per ottenere valori di stringa impliciti.
- come inizializzare utilizzando un init non parametrizzato e ottenere i valori dall'inizializzazione della sottoclasse.
Aggiornato a Swift 3.0 sintassi
Problemi correlati
- 1. creare un dizionario da oggetto groupby, Python
- 2. Come convertire un oggetto Swift in un dizionario
- 3. Creare una matrice in Swift da un oggetto NSData
- 4. scorrendo un dizionario a Swift
- 5. Python: creare un dizionario da testo/file in formato dizionario
- 6. Come copiare un "dizionario" in Swift?
- 7. Rimuovere un oggetto da un dizionario mutabile genera un'eccezione
- 8. può automapper creare un oggetto grafico da un oggetto flattato?
- 9. Converti generatore oggetto a un dizionario
- 10. creare un dizionario Python che contiene coppie chiave-valore specifici da un altro dizionario
- 11. Come costruire un defaultdict da un dizionario?
- 12. creare un dizionario da array di chiavi e valori
- 13. Creare una gerarchia da un dizionario di liste
- 14. Come creare un file eseguibile da un file oggetto c?
- 15. Creare un NSAlert con Swift
- 16. Come creare un dizionario personalizzato su Android
- 17. Come si trova un valore massimo in un dizionario Swift?
- 18. Creare un elenco di dizionario dinamico python
- 19. usando la mappa su un dizionario in Swift 2, per restituire un dizionario
- 20. Come posso utilizzare Generics per creare un modo per creare un oggetto IEnumerable da un enum?
- 21. Ordinamento un dizionario da Value
- 22. CMake creare un oggetto condiviso
- 23. Come creare un UITextView verticale sottoclassandolo da UIScrollView in Swift?
- 24. Come creare un file CSV da Core Data (swift)
- 25. Come creare un dizionario personalizzato per Hunspell
- 26. Convertire Swift dizionario per NSDictionary
- 27. Devo creare un oggetto DateRange?
- 28. Swift: Filtro dizionario
- 29. Come creare e aggiungere valori al dizionario in swift
- 30. Corrispondenza regolare da un dizionario in C#
Purtroppo hai ora curato la questione del tutto il riconoscimento. Non è più chiaro quale fosse la domanda o quale fosse la soluzione. Sarebbe meglio tornare alla domanda originale e inserire la risposta come risposta, non come una modifica della domanda che sovrascrive la domanda originale. – matt
Sì, non è più una domanda. Ho fatto una domanda ora, è meglio? O dovrei tornare? – possen
In sostanza non puoi farlo affatto in Swift. Comunque puoi farlo in Objective-C e Swift è perfettamente in grado di interagire con oggetti Objective-C. Nota che qualsiasi sottoclasse di NSObject non è un oggetto rapido, è un oggetto Objective-C. Si comportano prevalentemente allo stesso modo, ma quelli Objective-C sono in grado di essere dinamici, ma hanno altri svantaggi (ad esempio: sono molto più lenti). –