2016-12-08 7 views
1

私が使用スイフトクラスオブジェクトを初期化しようと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クラスです。 私はSwiftにObjective-Cを公開するためのヘッダーをブリッジしており、その逆もあります。

これを修正するにはどうすればよいですか?

+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

私は、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; 
} 
関連する問題