No. Gli oggetti Swift in realtà non ereditano da alcuna classe di base radice. Il compilatore può inserirne uno come dettaglio di implementazione, ma la lingua non ha questo.
La soluzione è una funzione e solitamente una funzione generica, piuttosto che un metodo. Qualcosa che si applica a "ogni tipo di oggetto" non è realmente incapsulato. Ci sono pochissime azioni che si applicano ad ogni cosa immaginabile nell'universo. Ma le funzioni possono mappare assolutamente qualsiasi cosa con assolutamente qualsiasi altra cosa, quindi sono uno strumento migliore qui.
Proprio come una nota, non tutti oggetti ereditano da NSObject
sia, e non è un requisito di lingua. Ma hai ragione che la stragrande maggioranza lo fa. Dai un'occhiata a NSProxy
per la parte superiore di un albero non-NSObject
(implementa il protocollo NSObject
, ma non eredita dalla classe NSObject
). Ecco perché id
non è la stessa cosa di NSObject*
.
Per le tue domande su oggetti associati, questo è incorporato:
import Foundation
class Thing { }
let thing = Thing()
var MyKey: Character = "0"
objc_setAssociatedObject(thing, &MyKey, "I'm a value!", objc_AssociationPolicy(OBJC_ASSOCIATION_COPY))
println(objc_getAssociatedObject(thing, &MyKey))
E 'questo quello che stavi cercando di creare? Notare che objc_setAssociatedObject
è anche una funzione, non un metodo, in ObjC.
fonte
2014-09-04 13:19:49
Questa attività di SwiftObject può essere un dettaglio di implementazione, ma le classi Swift che non ereditano da un'altra classe sono per default le classi root. – Atomix