2017-06-08 5 views
0

Hallo, ich bin im Moment ein Projekt von Ziel C zu Swift importieren. Das objektive C-Projekt verwendet eine benutzerdefinierte Bibliothek, die in einer der Klassen eine Funktion hat, die ein Klassenobjekt annimmt, das beim Laden der Daten ein ID-Obj mit der Klasse (Code unten) initialisiert. Auf der objektiven C-Seite funktioniert das großartig! Ich benutze die gleiche Bibliothek auf Swift mit einem Bridge-Header, aber leider ist mein Objekt Null, sobald die Daten geladen sind. Ich habe überprüft, dass das Datenobjekt, das zum Initialisieren des Objekts verwendet wird, Inhalt hat. Die benutzerdefinierte Swift-Klasse erfordert auch, dass ich einen Init (Daten: Data) Initialisierer implementieren, wenn ich eine benutzerdefinierte init() hinzufügen, ich bin neu zu schnell, jede Hilfe wäre großartig! Vielen Dank!initialisieren Swift-Klasse von Objective-C-Bibliothek

Objective C:

Library:

-(id) buildRetObject:(Class)clss fromData(NSData*) data{ 
id obj = nil; 
if (data != nil) { 
obj = [[clss alloc] initWithData:data]; 
} 
} 

benutzerdefiniertes Objekt ist eine Unterklasse eines anderen benutzerdefinierten Objekts, nicht in der Bibliothek, sondern auf der Haupt App:

Item.m:

-(id)init{ 
    if ([super init]){ 
     //do something 
    } 

    return self 
} 

Gleiches Objekt in swift:

//customClass super class is abstactCustomClass which is a sub abstract class of NSObject class, init functions are in here, the abstract class 
class Item: customClass { 

//variables 

override init() { 
    super.init() 
    // do something 
} 

required init!(data: Data){ 
    //fatalError(message here) 
    /*tried calling supers method 
    super.init(data:Data) gives error: fatal error: use of unimplemented initializer 'init(dictionary:)'*/ 
} 

//methods 

}

+1

Können Sie ein vollständigeres Beispiel veröffentlichen? Was ist die Swift-Klassendefinition? – Ssswift

+0

@Ssswift Ich habe meinen Beitrag aktualisiert. Bitte lassen Sie mich wissen, ob das hilfreicher ist – paul590

Antwort

0

Nach viel Graben ich endlich in der Lage war es herauszufinden, Objective-C von der abstrakten Klasse weiß, was die initializers sind, schnell nicht. Alles, was ich tun musste, war, diese Initialisierer zu implementieren, und es funktioniert.

required init!(data: Data){ 
    super.init(data:Data) 
} 

override init(dictionary: [AnyHashable: Any]!){ 
    super.init(Dictionary:dictionary) 
}