繁体   English   中英

将Swift导入Objective-c后出现错误

[英]error after importing Swift into Objective-c

我尝试在OC中使用swift,所以我在我想使用swift的.m文件中设置了定义模块YES,设置了带有产品名称的 产品模块 名称和“ import ProductName-Swift.h”。

但是项目无法运行,在“ ProductName-Swift.h”中引起很多错误 在此处输入图片说明

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

这是我将问题解决到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:如果您认为答案是正确的,我将创建一个帖子,询问有关模块设置但不针对编译器的帮助。

我对MapKit框架有同样的问题,编译器指向ProductName-Swift.h文件中缺少MKMapViewDelegate的声明。 为了解决此问题,我在桥头文件PoductName-Bridging-Header.h中添加了#import <MapKit/MapKit.h>

您可以尝试将UIApplicationDelegate添加到此标头。 我希望这能帮到您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM