2017-09-04 8 views
2

私はクラスMyClassをサブクラスNSObjectから持っています。これはObjective-Cで書かれています。Swiftからobjective-Cクラスのプロパティを設定する

@implementation MyClass 

    // Initializer and other stuff 
    // ... 

    - (void) setIsBypassEnabled: (BOOL) newValue 
    { 
     _value = newValue; 
    } 

    - (BOOL) getIsBypassEnabled 
    { 
     return _value; 
    } 

    @end 

しかし、私はスウィフトからプロパティを設定しようとするように:

@interface MyClass : NSObject 

     @property (getter = getIsBypassEnabled, setter = setIsBypassEnabled:) BOOL isBypassEnabled; 

    @end 

そして、これらの機能の両方を実装で定義されています。これは、カスタムのゲッターとセッターを持つプロパティを持ってい

let objcClass = MyClass() 
objcClass.isBypassEnabled = true 

エラー'isBypassEnabled' has been renamed to 'getIsBypassEnabled'が返されます。しかし、私は値を設定する必要があります、それを取得しないでください!

objcClass.setIsBypassEnabled(true) 

をしようと

は私に私のクラスは、そのようなメンバーを持っていないエラーが発生します。

.hファイルに

- (BOOL) getIsBypassEnabled; 
- (void) setIsBypassEnabled: (BOOL) newValue; 

明示的に宣言すると、いずれか助けていません。

この問題を解決するにはどうすればよいですか?ありがとうございました。

答えて

3
@interface MyClass : NSObject 
@property (getter = getIsBypassEnabled, setter = setIsBypassEnabled:) BOOL isBypassEnabled; 
@end 

open class MyClass : NSObject { 
    open var getIsBypassEnabled: Bool 
} 

としてスウィフトにマッピングされますので、

let objcClass = MyClass() 
objcClass.getIsBypassEnabled = true 

で実際にプロパティを設定することができ、このマッピングが意図されているかどうか、私は知らない、あなたが望むかもしれませんバグレポートを に送信してください。

また、意図したとおり

@interface MyClass : NSObject 

@property (getter = getIsBypassEnabled, setter = setIsBypassEnabled:) BOOL isBypassEnabled 
    NS_SWIFT_NAME(isBypassEnabled); 
@end 

、その後

let objcClass = MyClass() 
objcClass.isBypassEnabled = true 

作品とスウィフトのマッピングを上書きすることができます。

+0

プロパティとゲッターが一致しないため、実際の状況はまったく意味がありません。プロパティとゲッターはデフォルトで同じ名前しか持たないためです。問題はなく、修復されます。もう一度Swiftの次のリリースでコードを変更する必要があります。 –

関連する問題