Sono stato a lungo uno sviluppatore di Objective-C e ho sentito parlare di Realm alcune settimane fa. D'altra parte ho sempre desiderato migrare a poco a poco verso Swift, così ho creato un piccolo progetto che coinvolge Realm + Swift.Swift + Realm newbie: Problemi con un oggetto Realm semplice e relativi inizializzatori
Che cosa significa? Sono un principiante di Swift + Realm.
In ogni caso, ho creato un piccolo demo/Proof of concept per un progetto che ho in mente e ho pensato che doveva essere più facile. Ma il compilatore Xcode dice diversamente.
Il mio problema è con uno degli inizializzatori dei miei oggetti.
Le mie intenzioni erano semplici, ma apparentemente il Realm ha bisogno di più inizializzatori di quanto volessi.
Il codice di uno dei miei Reame oggetti è questo:
import Foundation
import Realm
import RealmSwift
class Partida: Object
{
dynamic var id_partida: String
dynamic var inventario: Inventory?
required init()
{
inventario = Inventory()
id_partida = "id_partida_test"
super.init()
}
required init(value: AnyObject, schema: RLMSchema) {
//fatalError("init(value:schema:) has not been implemented")
super.init(value: value, schema: schema)
}
required init(realm: RLMRealm, schema: RLMObjectSchema) {
//fatalError("init(realm:schema:) has not been implemented")
super.init(realm: realm, schema: schema)
}
override class func primaryKey() -> String? {
return "id_partida"
}
}
Il mio codice originale aveva solo la "normale" init initializer. Ma Xcode mi ha costretto a creare altri due inizializzatori aggiuntivi (valore e realm).
Se compilo il codice che ho appena incollato sopra, Xcode lamenta nei 2a e 3a inizializzatori richiesti, precisamente nella parte super.init. Dice:
Property 'self.id_partida' not initialized at super.init call
ho capito il significato di esso, ma non so come evitare l'errore perché se rimuovere entrambe le linee super.init, il programma si blocca in fase di esecuzione.
se io rimuovere il commento le righe FatalError, che si blocca anche in fase di esecuzione.
Infatti, non voglio utilizzare questi 2 inizializzatori. Se potessi, non li aggiungerei, ma Xcode deve, a quanto pare. L'unico codice che voglio veramente aggiungere alla mia funzione init dell'oggetto è la "semplice" funzione init, che era l'unica parte del codice considerata mia.
Penso che potrei avere alcune incomprensioni concetto nel Reame + Swift + inizializzatori.
Sto anche avendo la Xcode sensazione mi sta costringendo a aggiungere il codice non ho bisogno e/o non capisco neanche.
Qualsiasi aiuto sulla comprensione degli inizializzatori "init init" in Realm sarà più che benvenuto.
Realm Ufficiale + documentazione Swift è oltre la mia conoscenza come non capisco molti dei suoi concetti, anche dopo aver riletto molte volte.
Google e StackOverflow non sono stati realmente utile questa volta ...
Grazie.
È necessario solo 'convenience init' e all'interno aggiungere' self.init() ', non è necessario' required init' – Tj3n
Se commento gli inizializzatori complessi "init necessari" (2nd e 3rd), XCode 7.3 lamentano non importa quale. Semplicemente non si compila. Se rimuovo la parola chiave "required" prima del semplice inizializzatore, XCode lamenta: "è necessario utilizzare la parola chiave richiesta su tutte le sostituzioni". – Isaac
Si prega di controllare la risposta qui sotto, spero che ti aiuti – Tj3n