Questa soluzione è una sorta di simile a come lo uso in C#, e io averlo testato con successo in Xcode.
Ecco la ripartizione del processo:
- La classe annidata deve essere reso opzionale in modo da non dover inizializzarlo, così ce n'è un '?' nella dichiarazione; se si inizializza sia la classe padre e la classe nidificato, si finisce con un effetto 'ricorsione' e viene generato un errore
- creare una funzione regolare che riceve un argomento dello stesso tipo come classe principale
- Passo che argomento della classe nidificata (può andare nell'inizializzatore normale dell'oggetto nidificato). - Dal momento che gli oggetti vengono passati per riferimento per impostazione predefinita, non c'è niente di speciale per ottenere la classe annidata per il collegamento alla classe padre
- Dentro la classe nidificata, è necessario una variabile dello stesso tipo come la vostra classe genitore
Da qui in poi allestisci tutto come faresti normalmente.
Nell'area di esecuzione del codice, anche l'oggetto della classe nidificata deve essere considerato opzionale (da qui il '?'). Se te ne dimentichi, Xcode lo aggiungerà comunque.
In questo esempio, ho voluto disegnare una parola chiave "set", in modo da quando ho impostato le variabili, posso tipo:
testClass.set.(and then a descriptive method name)
Ecco il codice, e il suo obiettivo è quello di uscita di "test" in la console, dopo che il valore è stato impostato tramite l'oggetto nidificato:
class testClass
{
var test_string:String = ""
var set: class_set?
func construct_objects(argument: testClass)
{
self.set = class_set(argument: argument)
}
class class_set
{
var parent:testClass
init(argument: testClass)
{
parent = argument
}
func test_string_to_argument(argument: String)
{
parent.test_string = argument
}
}
}
var oTestClass = testClass()
oTestClass.construct_objects(oTestClass)
oTestClass.set?.test_string_to_argument("test")
print(oTestClass.test_string)
fonte
2014-12-06 04:43:32
Grazie, questo ha senso anche se è un po 'zoppo. Suppongo che, a causa di ciò, l'unica ragione per usare classi nidificate in swift sia quella di raggruppare le classi in un tipo di spazio dei nomi con la classe master come spazio dei nomi. – NJGUY
All'interno del corpo di 'Master', questo funzionerebbe:' Nested (master: m) '? – Unheilig
Sì, perché 'Nested' è all'interno del corpo di' Master'. –