'项目名-Swift.h'使用Swift 4在Xcode 9上找不到文件?

时间:2017-10-03 09:53:11

标签: objective-c swift swift3 ios11 swift4

我正在尝试在Xcode 9上的Objective c项目中添加 swift 4 文件。为此我遵循这些步骤 -

步骤1:假设swift类名是ShowAlertSwift.swift

   import UIKit

    @objc public class ShowAlertSwift: NSObject {

    @objc func printSome() {
        print("Print line System")
    }
    @objc func test () {
        print("Test swift Class in objective C project")
    }
}

第2步:目标-c类首先声明@class ShowAlertSwift

在objectiveClass.h中,我已经按照这些步骤进行了

@class ShowAlertSwift

@interface ShowAlertSwift: NSObject

-(void)test;
-(void)printSome;

@end

@interface ViewController : UIViewController

@end

第3步 - 在objectiveClass.m

#import "myproject-swift.h"

@interface UIViewController ()
{

}

@implementation
- (void)viewDidLoad
{
     ShowAlertSwift *alertObj = [[ShowAlertSwift alloc]init];
     [alertObj test];
}

我还设置了以下属性

Defines modules - Yes
Embedded_Content_Contains_Swift - Yes
Install Objective-C compatibility header - Yes
Objective C bridging header - $(SRCROOT)/Sources/SwiftBridging.h
Product Module Name - projectName

在所有这些事情之后我得到了像

这样的错误
1. myproject-swift.h file not found
2. Consecutive statement on a line must be seprated by ';'
3. failed to emit precompiled header '/Users/xyz/pqr/Trunk/build/SharedPrecompiledHeaders/myproject-Bridging-Header-swift_1CBSOZ0HA1Z9R-clang_UESSBOJR5CSH.pch' for bridging header '/Users/xyz/pqr/Trunk/OpenPage2/com/myProject/login/Login_iPad/myProject-Bridging-Header.h'

任何人都知道如何在Swift 4中解决Xcode 9上的问题吗?

3 个答案:

答案 0 :(得分:4)

我已经做了很多事情来解决这个问题,但我没有取得成功。但由于我的奉献精神,我终于解决了这个问题 -

  

注意:要访问目标C代码中的swift类,必须使用   类似于

的类声明中的@objec关键字
 @objc public class ShowAlertSwift: NSObject

首先创建一个快速类

 import UIKit

    @objc public class ShowAlertSwift: NSObject {

    @objc func printSome() {
        print("Print line System")
    }
    @objc func test () {
        print("Test swift Class in objective C project")
    }
}

在objectiveClass.h中,我已经按照这些步骤进行了

    @class ShowAlertSwift

    @interface ViewController : UIViewController

    @end

此处无需再次定义接口,因为此接口已存在于“myproject-swift.h”文件中。提交问题首先要清楚了解或参见下文

@interface ShowAlertSwift: NSObject

-(void)test;
-(void)printSome;

@end

第3步 - 在objectiveClass.m

#import "myproject-swift.h"

@interface UIViewController ()
{

}

@implementation
- (void)viewDidLoad
{
     ShowAlertSwift *alertObj = [[ShowAlertSwift alloc]init];
     [alertObj test];
}

还可以在构建设置中启用/更新这些属性 -

1. Defines Module set to YES (Mandatory on project - not on target)

2. Embedded_Content_Contains_Swift - Yes
3. Install Objective-C compatibility header - Yes
4. Objective C bridging header - $(SRCROOT)/Sources/SwiftBridging.h
5. Product Module Name - projectName

答案 1 :(得分:0)

您是否删除了派生数据?如果没有,则删除派生数据,然后清理+构建您的应用程序。

这对我的代码有所帮助。所以希望你不会得到错误。

答案 2 :(得分:0)

我重命名了项目的基本文件夹,这就是发生问题的原因。

所以我不得不像这样重命名每个错误行

Restaurant-swift.h到FoodPicker_Restaurant-swift.h

“-”代表项目名称中的空格。