我尝试在OC中使用swift,因此我设置定义模块是设置产品模块名称,产品名称和“导入产品名称 - Swift.h“在.m文件中我想使用swift
但是项目无法运行,导致“ProductName-Swift.h”出现很多错误
AppDelegate.swift似乎有问题,如何解决这个问题
答案 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添加到此标头中。我希望这会对你有所帮助。