【问题标题】:Failed to emit precompiled header because Loop condition由于循环条件,无法发出预编译的标头
【发布时间】:2018-11-21 13:09:16
【问题描述】:

假设我有 Swift 和 Objc 类,还有一个 MyProject-Bridging.h

BazSwiftClass.swift

public class BazSwiftClass: NSObject {
    public let foo: String
    @objc init(foo: String) {
        self.foo = foo
    }
}

FooClass.h

#import "MyProject-Swift.h"
@interface FooClass : NSObject {
     - (BazSwiftClass)bazMethod;
}

我想在另一个 Swift 类中访问 FooClass.h(比如说 BarSwiftClass)

public class BarSwiftClass {
     public hello() -> BazSwiftClass {
          return FooClass().bazMethod()
     } 
}

我的 swift 文件中需要 FooClass.h,所以我在 MyProject-Bridging.h 中添加了 FooClass

#import "FooClass.h"

所以 Flow 就像 BarSwiftClass -> FooClass -> BazSwiftClass

它无法工作,因为编译器显示“未能发出预编译头”,我认为这是因为 MyProejct-Bridging.h 中的#import "FooClass.h"

请帮忙。

谢谢。

【问题讨论】:

  • 您只需要在桥接头中导入 .h 文件而不是 .m 文件,因此请删除对 .m 文件的引用,清理并重建
  • 我只在 .h 文件中导入,但它仍然导致错误。我编辑我的问题以避免混淆。
  • 你检查过这个链接了吗@JeffersonSetiawan stackoverflow.com/questions/46293028/…
  • 是的,我从那个链接知道问题(我使用桥接,在 MyProject-bridging 中,我也导入了那个 objc 文件),但我想知道我可以继续使用这种方法吗?跨度>
  • 查看答案

标签: ios swift xcode bridging-header objc-bridging-header


【解决方案1】:

替换你的代码

#import "MyProject-Swift.h"
@interface FooClass : NSObject {
     - (BazSwiftClass)bazMethod;
}

@class BazSwiftClass
@interface FooClass : NSObject {
     - (BazSwiftClass)bazMethod;
}

FooClass.m 文件中可以导入 #import "MyProject-Swift.h"

【讨论】:

  • 谢谢@PrashantTukadiya!使用 (@)class BazSwiftClass 后,我可以编译它。
  • 一般来说,在您的.h 文件中导入尽可能少的内容,并尝试仅使用转发类和协议引用。
  • 一般来说,在您的.h 文件中导入尽可能少的内容,并尝试仅使用转发类和协议引用。
猜你喜欢
  • 2018-01-28
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 2022-12-12
  • 2021-08-06
  • 2016-03-12
  • 2018-09-17
  • 2018-02-27
相关资源
最近更新 更多