从 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
按预期工作。
我有一个 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
按预期工作。