Swift 中的 ARC 不可用方法
ARC unavailable methods in Swift
我看到了一个有趣的案例
Estimote nearables SDK
他们有一个 class ESTNearable
和 属性 叫做 zone
。
// ENUM
typedef NS_ENUM(NSInteger, ESTNearableZone ) {
ESTNearableZoneUnknown = 0,
ESTNearableZoneImmediate,
ESTNearableZoneNear,
ESTNearableZoneFar,
};
// CLASS
@interface ESTNearable : NSObject <NSCopying, NSCoding>
// ...
@property (nonatomic, assign, readonly) ESTNearableZone zone;
// ...
@end
因此,当我尝试在 Swift 中使用此方法时,编译器失败并出现该错误:
据我所知,存在某种编译器错误,出于某种原因,它认为我想使用 NSObject
- (struct _NSZone *)zone OBJC_ARC_UNAVAILABLE;
中的旧 zone
方法,我可以使用其他特定属性其中 class 没有任何问题。
因为我使用的是 SDK,所以我无法更改 zone
方法的名称。我相信我可以编写某种 obj-c 类别,在那里添加一些新方法,这将 return 原始值,但我不想在我的项目中添加 obj-c classes .
是否有可能从 swift 调用此方法,因为我相信 class 个实例会调用正确的 zone
方法?
提前致谢!
在这里我发现了同样的问题。我answered更深入那里。我找不到更好的东西,所以我继续我的旧假设。
我将此类别添加到 桥接头。效果很好。
#import <EstimoteSDK/EstimoteSDK.h>
@interface ESTNearable (Ex)
/// Solving the compiler problem that "zone" method is unavailable in Swift
@property (readonly) ESTNearableZone nearableZone;
@end
// Implementation
@implementation ESTNearable (Ex)
- (ESTNearableZone)nearableZone
{
return self.zone;
}
@end
之后我就在Swift
中使用了nearableZone
方法
var zone = someNearable.nearableZone
我看到了一个有趣的案例 Estimote nearables SDK
他们有一个 class ESTNearable
和 属性 叫做 zone
。
// ENUM
typedef NS_ENUM(NSInteger, ESTNearableZone ) {
ESTNearableZoneUnknown = 0,
ESTNearableZoneImmediate,
ESTNearableZoneNear,
ESTNearableZoneFar,
};
// CLASS
@interface ESTNearable : NSObject <NSCopying, NSCoding>
// ...
@property (nonatomic, assign, readonly) ESTNearableZone zone;
// ...
@end
因此,当我尝试在 Swift 中使用此方法时,编译器失败并出现该错误:
据我所知,存在某种编译器错误,出于某种原因,它认为我想使用 NSObject
- (struct _NSZone *)zone OBJC_ARC_UNAVAILABLE;
中的旧 zone
方法,我可以使用其他特定属性其中 class 没有任何问题。
因为我使用的是 SDK,所以我无法更改 zone
方法的名称。我相信我可以编写某种 obj-c 类别,在那里添加一些新方法,这将 return 原始值,但我不想在我的项目中添加 obj-c classes .
是否有可能从 swift 调用此方法,因为我相信 class 个实例会调用正确的 zone
方法?
提前致谢!
在这里我发现了同样的问题。我answered更深入那里。我找不到更好的东西,所以我继续我的旧假设。
我将此类别添加到 桥接头。效果很好。
#import <EstimoteSDK/EstimoteSDK.h>
@interface ESTNearable (Ex)
/// Solving the compiler problem that "zone" method is unavailable in Swift
@property (readonly) ESTNearableZone nearableZone;
@end
// Implementation
@implementation ESTNearable (Ex)
- (ESTNearableZone)nearableZone
{
return self.zone;
}
@end
之后我就在Swift
中使用了nearableZone
方法
var zone = someNearable.nearableZone