2015-06-02 6 views
3

я был в состоянии видеть интересный случай, используя Estimote nearables SDKARC недоступны методы Swift

Они имеют класс 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 в свой проект.

Есть ли возможность называть этот метод быстрым, как я считаю, правильный метод zone будет вызван для экземпляров класса?

Заранее благодарен!

+0

бы выключая ARC для этого файла в одиночку с помощью '-fno-ObjC-arc', как компилировать флаги работают? –

+0

Спасибо за совет, но я считаю, что не разрешено отключать ARC для быстрых файлов. –

+0

Если вы укажете зону как ESTNearableZone вместо разрешения компилятору, это может помочь компилятору выбрать правильный метод зоны для использования. –

ответ

0

Здесь я нашел тот же вопрос. I answered более глубоко там. Я не мог найти что-то более хорошее, поэтому я продолжил свои старые предположения.

I Добавил эту категорию в Мостовой заголовок. Он работал нормально.

#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 

После этого я просто использовал nearableZone метод в Swift

var zone = someNearable.nearableZone 
Смежные вопросы