【问题标题】:ARC unavailable methods in SwiftSwift 中 ARC 不可用的方法
【发布时间】:2015-06-02 14:52:05
【问题描述】:

我看到了一个有趣的案例 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 中使用此方法时,编译器会出现以下错误:

据我所知,存在某种编译器错误,出于某种原因,它认为我想使用 NSObject - (struct _NSZone *)zone OBJC_ARC_UNAVAILABLE; 中的旧 zone 方法,我可以毫无问题地使用该类的其他特定属性。

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

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

提前致谢!

【问题讨论】:

  • 是否会单独使用 -fno-objc-arc 为该文件关闭 ARC 作为编译标志?
  • 感谢您的建议,但我认为不允许为 swift 文件禁用 ARC
  • 如果您将 zone 指定为 ESTNearableZone 而不是让编译器决定,这可能有助于编译器选择要使用的正确 zone 方法。
  • 我试过了,没用。

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


【解决方案1】:

在这里我发现了同样的问题。我在那里更深入地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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    相关资源
    最近更新 更多