2016-12-08 35 views
1

我有它試圖使用給init一個夫特類對象的Objective-C類:爲「xxx」的無可見@interface聲明選擇「INIT:」

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

這裏是對應夫特類:

final class SwiftClass: NSObject { 

    private var objcTestClass: ObjCTestClass 

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

我收到以下錯誤:

No visible @interface for 'xxx' declares the selector 'init:'

注: ObjCTestClass是一個Objective-C類。 我有橋接頭來暴露Objective-C到Swift,反之亦然。

如何解決這一問題?

+0

是否需要'[[SwiftClass alloc] initWith:self.testclass];'? – PeejWeej

+0

swift類定義: init(testclass:ObjCTestClass){ 我不確定initWith來自哪裏。我試過了,但沒有奏效。謝謝。 – ssk

+0

我誤解了它應該是'[[SwiftClass alloc] initWithTestClass:self.testclass]'。如果設置正確,它應該在您輸入時自動完成。 – PeejWeej

回答

1

應當[[SwiftClass的alloc] initWithTestClass:self.testclass]。這應該自動完成,當你輸入,如果它的設置正確

1

我通過初始化後,明確地設置屬性固定上述問題:

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; 
} 
相關問題