从 Swift 设置 objective-C class 属性

Setting property of objective-C class from Swift

我有一个 class MyClass 子 class 来自 NSObject。它写在Objective-C。它有一个 属性 自定义 getter 和 setter:

    @interface MyClass : NSObject

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

    @end

并且这两个函数都在实现中定义:

    @implementation MyClass

    // Initializer and other stuff
    // ...

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

    -   (BOOL) getIsBypassEnabled
    {
        return _value;
    }

   @end

但是当我尝试从 Swift 设置 属性 时:

let objcClass = MyClass()
objcClass.isBypassEnabled = true

我收到一个错误 'isBypassEnabled' has been renamed to 'getIsBypassEnabled'。但是我需要设置值,而不是获取它!

正在尝试

objcClass.setIsBypassEnabled(true)

给我一个错误,我的 class 没有这样的成员。

声明中

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

显式在 .h 文件中也无济于事。

我该如何解决这个问题?谢谢。

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

映射到 Swift 为

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

所以你可以设置 属性 实际上

let objcClass = MyClass()
objcClass.getIsBypassEnabled = true

我不知道这个映射是不是有意为之,你可能想要 提交错误报告。

您还可以使用

覆盖 Swift 映射
@interface MyClass : NSObject

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

然后

let objcClass = MyClass()
objcClass.isBypassEnabled = true

按预期工作。