在通过桥接 header 导入的 Objective-C 文件中使用 "Availability.h"
Using "Availability.h" in Objective-C file imported through bridging header
我正在尝试使用依赖于 Availability
宏的开源解决方案,我添加到 Swift 项目的 Objective-C 文件导入必要的 header:
#import "Availability.h"
(tried changing "" for <> as well)
我知道它是 Foundation 框架的一部分,我在 Linked Frameworks and Libraries
部分添加了它。但是,所有 Availability-specific 行代码都被忽略了,我最终遇到了 Duplicate interface definition
错误,而这些应该是 platform/iOS version-specific 定义。
我已经尝试 adding/removing 框架,Cleaning
/Cleaning build folder
,根据 this question 和其他人的所有建议,尝试重新启动 Xcode - 没有任何帮助。
如何在使用桥接 header 导入到 Swift 项目的 Objective-C 文件中使用可用性?
设置:Xcode7.3
所以你有一个 Swift 项目,你添加了 Apple "Availability.h" from here.
然后您想要在 Objective-C 或 Swift 中使用这些宏。这很简单,但重要的是要注意您不能直接在 Swift 中使用 C 宏。您将需要一个 objective-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)")
我正在尝试使用依赖于 Availability
宏的开源解决方案,我添加到 Swift 项目的 Objective-C 文件导入必要的 header:
#import "Availability.h"
(tried changing "" for <> as well)
我知道它是 Foundation 框架的一部分,我在 Linked Frameworks and Libraries
部分添加了它。但是,所有 Availability-specific 行代码都被忽略了,我最终遇到了 Duplicate interface definition
错误,而这些应该是 platform/iOS version-specific 定义。
我已经尝试 adding/removing 框架,Cleaning
/Cleaning build folder
,根据 this question 和其他人的所有建议,尝试重新启动 Xcode - 没有任何帮助。
如何在使用桥接 header 导入到 Swift 项目的 Objective-C 文件中使用可用性?
设置:Xcode7.3
所以你有一个 Swift 项目,你添加了 Apple "Availability.h" from here.
然后您想要在 Objective-C 或 Swift 中使用这些宏。这很简单,但重要的是要注意您不能直接在 Swift 中使用 C 宏。您将需要一个 objective-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)")