Использование "Availability.h" в файле Objective-C, импортированном через заголовок моста
Я пытаюсь использовать решение с открытым исходным кодом, которое опирается на Availability
Макросы, файлы Objective-C, которые я добавил в свой проект Swift, импортируют необходимый заголовок:
#import "Availability.h"
(tried changing "" for <> as well)
Я понимаю, что это часть основы Фонда, которую я добавил в Linked Frameworks and Libraries
раздел. Однако все строки кода, относящиеся к доступности, игнорируются, и в итоге Duplicate interface definition
ошибки, в то время как предполагается, что это определения для конкретной платформы /iOS.
Я пытался добавить / удалить структуру, Cleaning
/Cleaning build folder
, согласно всем предложениям в этом вопросе и других, попытался перезапустить XCode - ничего не помогло.
Как использовать доступность в файлах Objective-C, импортированных в проект Swift с использованием заголовка Bridging?
Настройка: Xcode 7.3
1 ответ
Итак, у вас есть проект Swift, и вы добавили отсюда Apple "Availability.h".
Затем вы хотите использовать эти макросы в Objective-C или Swift. Это достаточно просто, но важно отметить, что вы не можете использовать макрос C в Swift напрямую. Вам понадобится обёртка объектива-C.
// AvailableTester.h
#import <Foundation/Foundation.h>
@interface AvailableTester : NSObject
- (BOOL) testAvailabilityMacroLessThaniPhone3;
- (BOOL) testAvailabilityMacroGreaterThaniPhone3;
@end
и реализация:
// AvailableTester.m
#import "AvailableTester.h"
#import "Availability.h"
@implementation AvailableTester
- (BOOL) testAvailabilityMacroLessThaniPhone3
{
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_0
return YES;
#else
return NO;
#endif
}
- (BOOL) testAvailabilityMacroGreaterThaniPhone3
{
#if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_3_0
return YES;
#else
return NO;
#endif
}
@end
Тогда в заголовке вашего моста:
#import "AvailableTester.h"
Теперь вы можете использовать его из Swift:
let test = AvailableTester()
var result = test.testAvailabilityMacroLessThaniPhone3()
print("Result1 was \(result)")
result = test.testAvailabilityMacroGreaterThaniPhone3()
print("Result2 was \(result)")