'xxx'没有可见的@interface声明选择器'init:'

时间:2016-12-08 00:27:50

标签: ios objective-c swift xcode

我有一个objective-c类,它尝试使用:

初始化Swift类对象
- (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;
}

这是相应的Swift类:

final class SwiftClass: NSObject {

    private var objcTestClass: ObjCTestClass

    init(testclass:ObjCTestClass) {
        provider = CXProvider(configuration: type(of: self).providerConfiguration)
        objcTestClass = testclass
        super.init()
    }
}

我收到以下错误:

  

'xxx'没有可见的@interface声明选择器'init:'

注意: ObjCTestClass是一个objective-c类。 我有桥接头来将Objective-c暴露给Swift,反之亦然。

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我通过在init:

之后显式设置属性来解决上述问题
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;
}

答案 1 :(得分:1)

它应该是[[SwiftClass alloc] initWithTestClass:self.testclass]。如果正确设置,这应该在您输入时自动完成