/ / Kein sichtbares @Interface für 'xxx' deklariert den Selektor 'init:' - ios, object-c, swift, xcode

Kein sichtbares @interface für 'xxx' deklariert den Selektor 'init:' - ios, objective-c, swift, xcode

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 № 1

Es 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;
}