【问题标题】:Unable to use Swift protocol in Objective C class, as it causes Segmentation fault: 11无法在 Objective C 类中使用 Swift 协议,因为它会导致分段错误:11
【发布时间】:2017-02-09 10:54:07
【问题描述】:

我无法在任何地方找到解决方案:

我的应用程序有 Swift 协议,我需要在旧的 Objective-C 类中实现它。在我创建Objective C类的对象时实现协议后,Xcode显示分段错误错误11。挖了很多帖子找到了解决方案,但没有成功。

为了说明问题,我在这里创建了一个演示 iOS 项目:

https://github.com/tusharbhatta/SwiftSegmentationFault

更新:

解决了这个问题。在“已解决”的分支上查看 上述相同的回购。 :)

但如果您知道任何更好的解决方案,请提供帮助。非常感谢

【问题讨论】:

  • segmentation fault error 11 请将崩溃报告发送给 Apple。
  • 我下载了您的项目并尝试构建它 - 我注意到当我从桥接头中删除 HatchbackCar 时,项目编译。当然,我不能在 Swift 代码中使用它。也许问题在于在 Obj-c 中使用 Swift 代码,反之亦然。无论如何,在我看来,这就像 Xcode 中的一个错误。
  • @Eric Aya,是的,我向 Apple 提交了错误报告。
  • @Tushar 我已经解决了这个问题 :) 有几个错误我只是在输入答案。

标签: ios swift xcode compiler-errors


【解决方案1】:

我发现您的代码存在一些问题,请按照以下步骤操作。希望这能解决您的问题。

1)。转到 Build Settings 并搜索“Defines Module”,将其值更改为 YES。

2)。转到“HatchbackCar.h”现在删除“@protocol CarProtocol;”和“CarProtocol”。

3)。现在清除项目。

4)。转到“HatchbackCar.m”添加以下代码。

 @interface HatchbackCar() <CarProtocol>

@end

5)。现在再次清除项目。

6)。构建项目。

【讨论】:

  • 但是那样的话,在 CarProtocol 类型的 swift 数组中使用 HatchbackCar 的对象并不容易,因为编译器无法看到私有实现。例如: var cars = [CarProtocol]() let hyundaiSantro = HatchbackCar("Huyndai Santro",wheels: 4) cars.append(hyundaiSantro)
  • 我已尝试按照您的要求解决代码中的错误。进一步没有测试代码。
  • 我真的很欣赏您在 Xcode 8.2 中的解决方案。非常感谢人:)
【解决方案2】:

从 Apple 工程师那里得到了关于我在 Apple Developer Bug Reporting 门户上的错误报告的答复,该问题已在 Beta Xcode 8.3 中得到修复,并且项目成功构建。以下是 Apple 的实际回复:

工程部门为您提供以下反馈:

使用 Xcode 8.3 beta 2 成功构建项目。

请使用 Xcode 8.3 测试版验证此问题并更新您的错误 在https://bugreport.apple.com/ 报告您的结果。

Xcode 8.3 beta 2 (8W120l) https://developer.apple.com/download/ 已发布 日期:2017 年 2 月 6 日

谢谢。

感谢您帮助我们发现和隔离错误 在我们的产品中。

最好的问候,

Apple 开发者支持全球开发者关系

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    相关资源
    最近更新 更多