Ich habe eine Objective-C-Klasse, die versucht, ein Swift-Klassenobjekt zu initiieren.
- (id) init : (ObjCTestClass*) testclass
{
NSLog( @"Creating" );
self = [super init];
if ( !self )
{
return nil;
}
self.testclass = testclass;
self.swiftClass = [[SwiftClass alloc] init: self.testclass];
return self;
}
Hier ist die entsprechende Swift-Klasse:
final class SwiftClass: NSObject {
private var objcTestClass: ObjCTestClass
init(testclass:ObjCTestClass) {
provider = CXProvider(configuration: type(of: self).providerConfiguration)
objcTestClass = testclass
super.init()
}
}
Ich erhalte den folgenden Fehler:
Kein sichtbares @interface für "xxx" erklärt den Selektor "init:"
Hinweis: ObjCTestClass ist eine Objective-C-Klasse. Ich habe Überbrückungsheader, um Objective-c mit Swift zu belichten und umgekehrt.
Wie behebe ich das?
Antworten:
1 für die Antwort № 1Es sollte [[SwiftClass-Zuordnung] initWithTestClass: self.testclass] sein. Dies sollte automatisch abgeschlossen werden, wenn Sie bei korrekter Einrichtung tippen
1 für die Antwort № 2
Das obige Problem wurde behoben, indem die Eigenschaft explizit nach init festgelegt wurde:
final class SwiftClass: NSObject {
**public var objcTestClass: ObjCTestClass!**
init() {
provider = CXProvider(configuration: type(of: self).providerConfiguration)
super.init()
}
}
- (id) init : (ObjCTestClass*) testclass
{
NSLog( @"Creating" );
self = [super init];
if ( !self )
{
return nil;
}
self.testclass = testclass;
**self.swiftClass = [[SwiftClass alloc] init];
self.swiftClass.objcTestClass = self.testclass;**
return self;
}