2016-08-15 102 views
0

我试图使用一个开源的解决方案,它依赖于Availability宏,Objective-C文件添加到我的Swift项目中导入必要的头文件:在通过桥接头导入的Objective-C文件中使用“Availability.h”

#import "Availability.h" 
(tried changing "" for <> as well) 

据我所知,它是Foundation框架的一部分,我在Linked Frameworks and Libraries部分添加了该框架。但是,所有特定于可用性的代码行都被忽略,最终导致出现Duplicate interface definition错误,而这些错误应该是平台/ iOS版本特定的定义。

我试着添加/删除框架,Cleaning/Cleaning build folder,根据this question和其他人的所有建议,尝试重新启动Xcode - 没有任何帮助。

如何在使用桥接头导入到Swift项目的Objective-C文件中使用可用性?

设置:Xcode的7.3

回答

1

所以,你有一个雨燕的项目,以及您添加的苹果 “Availability.h” from here

然后你想在Objective-C或Swift中使用这些宏。这很简单,但重要的是要注意,你不能直接在Swift中使用C宏。你将需要一个客观的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" 

现在你可以从斯威夫特使用它:

let test = AvailableTester() 
    var result = test.testAvailabilityMacroLessThaniPhone3() 
    print("Result1 was \(result)") 

    result = test.testAvailabilityMacroGreaterThaniPhone3() 
    print("Result2 was \(result)") 
+0

感谢您的答复!不幸的是,这不是我正在寻找的,我想在Objective-C中使用Available,而不是Swift。而我无法正确导入到我的Objective-C头文件,它只是不起作用 –

+0

你有没有在你的项目?这不是Apple框架的一部分 - 它是一个独立的文件。从链接下载并将其拖入您的项目。 –

+0

我在这里有点困惑,看到一些帖子指出它是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 我试着将它添加到我的项目- 没有运气。复制可用性文件,尝试构建项目,将返回给您结果 –

相关问题