我可以阻止扩展导出到Objective-C的Swift头吗?

时间:2018-01-04 13:54:18

标签: objective-c swift objective-c-swift-bridge

我有一个带有1个Swift类的Objective-C项目。这个类使用的是一个也用Swift编写的框架。 (使用CocoaPods来包含框架)

我的问题是-Swift.h文件正在导出我的扩展,这些扩展遵循框架中的协议。现在,当我尝试在Objective-C中导入-Swift.h文件时,它抱怨无法找到协议定义。

我不希望导出这些扩展名。它们仅用于本课程。我不能使用private或fileprivate来声明协议一致性的扩展。我还尝试在扩展声明之前添加@nonobjc(将警告级联到我的方法中)并且它仍然被导出。

以下是我的扩展程序:

2 ?- length(List, 3), List ins 1..3 \/ 5..6 \/ 8, label(List).
List = [1, 1, 1] ;
List = [1, 1, 2] ;
List = [1, 1, 3] ;
List = [1, 1, 5] ;
List = [1, 1, 6] ;
List = [1, 1, 8] ;
List = [1, 2, 1] ;
List = [1, 2, 2]
...

并生成标题:

extension MessagingExperience: MessagingDelegate {
    ...
}

extension MessagingExperience: MessagingNotificationDelegate {
    ...
}

通过在Objective-C类中包含-Swift.h而产生的错误:

无法找到“MessagingDelegate”的协议声明

无法找到'MessagingNotificationDelegate'的协议声明

有没有办法阻止它出现在标题中?

感谢。

1 个答案:

答案 0 :(得分:0)

在MessagingExperience.swift中创建一个符合框架中定义的协议的私有类。因为它是私有类,所以不会在生成的-Swift.h中指定协议。