将Swift导入Objective-c后出错

时间:2014-06-24 07:03:05

标签: ios objective-c swift

我尝试在OC中使用swift,因此我设置定义模块是设置产品模块名称产品名称和“导入产品名称 - Swift.h“在.m文件中我想使用swift

但是项目无法运行,导致“ProductName-Swift.h”出现很多错误 enter image description here

AppDelegate.swift似乎有问题,如何解决这个问题

2 个答案:

答案 0 :(得分:1)

这是我如何将问题解决到ProductName-Swift.h中: 在这个文件中,我可以看到这样的导入:

#if defined(__has_feature) && __has_feature(modules)
    @import UIKit;
    @import CoreGraphics;
    @import MessageUI;
    @import AddressBookUI;
    @import AddressBook;
    @import Foundation;
    @import ObjectiveC;
    @import MapKit;
    @import CoreLocation;
#endif

所以,关于错误,我认为导入效果不好。 首先,编译器没有进入if。它似乎是

__has_feature(modules)

返回false(而我在构建设置上设置它)。

好的,放开没有......又错了。看来@import只能在激活模块时才能使用,而且他找不到....所以我用#import替换了所有@import并且它可以工作!! 但最后一个问题是每次我在swift文件中编写时都会生成文件。我必须每次更改这些导入...所以我创建了这个代码片段:

#import <UIKit/UIKit.h>
#import <MessageUI/MessageUI.h>
#import <Foundation/Foundation.h>
#import <CoreGraphics/CoreGraphics.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
#import <AddressBookUI/AddressBookUI.h>
typedef ABRecordRef ABRecord;

(最后一行是用Objective-C中使用的ABRecordRef替换swift方法中的ABRecord)

注意:@import ObjectiveC没有任何#import,但似乎不需要它。

PS:如果您认为自己有答案,我会创建一个帖子来询问有关模块集但不是编译器的帮助。; - )

答案 1 :(得分:0)

我对MapKit框架有同样的问题,编译器指向错误的ProductName-Swift.h文件中的MKMapViewDelegate声明。为了解决这个问题,我补充道  #import <MapKit/MapKit.h> 在桥头文件PoductName-Bridging-Header.h。

您可以尝试将UIApplicationDelegate添加到此标头中。我希望这会对你有所帮助。