Swift中的ARC不可用方法

时间:2015-06-02 14:52:05

标签: ios objective-c swift automatic-ref-counting

我能够看到一个有趣的案例使用 Estimote nearables SDK

他们有一个类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 中使用此方法时,编译器会因该错误而失败: enter image description here

据我所知,存在某种编译器错误,并且由于某种原因,它认为我想使用zone NSObject中的旧- (struct _NSZone *)zone OBJC_ARC_UNAVAILABLE;方法,我可以使用其他特定属性上课没有任何问题。

当我使用SDK时,我无法更改zone方法的名称。我相信我可以编写某种obj-c类,在那里添加一些新方法,它将返回原始方法的值,但我不想在我的项目中添加obj-c类。

是否有可能从swift调用此方法,因为我相信将为类实例调用正确的zone方法?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我在这里找到了同样的问题。我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