在通过桥接头导入的 Objective-C 文件中使用“Availability.h”
Posted
技术标签:
【中文标题】在通过桥接头导入的 Objective-C 文件中使用“Availability.h”【英文标题】:Using "Availability.h" in Objective-C file imported through bridging header 【发布时间】:2016-08-15 18:01:22 【问题描述】:我正在尝试使用依赖于Availability
宏的开源解决方案,我添加到我的 Swift 项目中的 Objective-C 文件导入了必要的标头:
#import "Availability.h"
(tried changing "" for <> as well)
我知道它是我在Linked Frameworks and Libraries
部分添加的 Foundation 框架的一部分。但是,所有特定于可用性的代码行都被忽略了,我最终会遇到Duplicate interface definition
错误,而这些应该是特定于平台/ios 版本的定义。
我已经尝试添加/删除框架 Cleaning
/Cleaning build folder
,按照 this question 和其他人中的所有建议,尝试重新启动 Xcode - 没有任何帮助。
如何在使用桥接头导入到 Swift 项目的 Objective-C 文件中使用可用性?
设置:Xcode 7.3
【问题讨论】:
【参考方案1】:所以你有一个 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)")
【讨论】:
感谢您的回复!不幸的是,这不是我想要的,我想在 Objective-C 中使用可用,而不是 Swift。而且我无法将它正确导入到我的 Objective-C 头文件中,它只是不起作用 你的项目中有它吗?它不是 Apple 框架的一部分——它是一个独立的文件。从链接下载它并将其拖到您的项目中。 我在这里有点困惑,看到一些帖子说它是 Foundation 框架的一部分。在我正在使用的项目中,该项目构建良好,但它是一个纯 Objective-C 项目,文件位于此处:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator。 sdk/usr/include/Availability.h 有一个标题搜索路径:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include 我尝试将它添加到我的项目中 - 不走运。复制可用性文件,尝试构建项目,将返回给您结果 好的,在本地添加文件解决了非功能可用性的问题,一般来说,你的答案对 Swift 用户来说是一个有用的答案,所以我会接受它作为一个正确的答案:) 我的代码仍然没有不过,我真的厌倦了试图让 Objective-C 与 Swift 一起正常工作,逻辑大不相同,我宁愿用 Swift 重写所有内容以上是关于在通过桥接头导入的 Objective-C 文件中使用“Availability.h”的主要内容,如果未能解决你的问题,请参考以下文章
无法使用桥接头将 Objective-C 文件导入 Swift 项目