mik*_*ike 12 objective-c swift
什么是Swift中以下Objective-C代码的等价物?
@property (nonatomic, assign, getter = isOpen) BOOL open;
Run Code Online (Sandbox Code Playgroud)
具体来说,如何在Swift中声明一个变量来合成具有自定义名称的getter?
此外,您如何随后覆盖getter和setter的实现?
jon*_*ley 19
var open: Bool {
@objc(isOpen)
get {
// custom getter
}
set {
// custom setter
}
}
Run Code Online (Sandbox Code Playgroud)
导致生成此标头:
SWIFT_CLASS("_TtC11SwiftToObjC9TestClass")
@interface TestClass : NSObject
@property (nonatomic, getter=isOpen) BOOL open;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
Run Code Online (Sandbox Code Playgroud)
Bri*_*acy 18
你的假设很接近,但有些事情可以改变.我将尽力帮助您尽可能接近Objective-C版本.
首先,这nonatomic
与assign
快速无关.这让我们失望了
@property (getter = isOpen) BOOL open;
Run Code Online (Sandbox Code Playgroud)
由于swift中的属性只是实例变量,因此快速转换如下.
var open:Bool
Run Code Online (Sandbox Code Playgroud)
虽然它具有与Objective-C版本相同的基本功能,但它缺少命名的getter(isOpen
).不幸的是,没有直接翻译为swift(尚未).您可以使用自定义getter和setter.
var open:Bool {
get {
// custom getter
}
set {
// custom setter
}
}
Run Code Online (Sandbox Code Playgroud)
一个相当粗略的工作是将字面上称为另一个函数isOpen
作为一个吸气剂.
func isOpen() -> Bool { return self.open }
Run Code Online (Sandbox Code Playgroud)
总而言之,你所要求的只是略有可能,但希望在后期版本的swift中可以成为现实.
归档时间: |
|
查看次数: |
9102 次 |
最近记录: |