使用Swift协议时短路

时间:2015-07-25 18:34:53

标签: ios objective-c swift protocols

众所周知,不可能在-Header.h中包含文件中的接口头文件。 我的实际问题是我有一个类的协议的定义,其中一个是Swift的协议:

@protocol arrivingDelegate;

@interface palettaTraffic : NSObject<MKMapViewDelegate, arrivingDelegate> {
}

如果我导入* -Swift.h文件,当文件包含在头文件中包含的另一个文件中时,我会进入丑陋的循环。

当我使用@protocol指令时会发生这种情况:这是一个警告,但是非常令人不安。

Screen-shot with the warnings

这是swift协议的定义方式:

@objc public protocol arrivingDelegate {
    func submitManualBusLine(busStripe:StripeProtocol)
}

我也发现了类似的帖子: Swift protocol in Objective-C class

但似乎没有任何建议适用。

3 个答案:

答案 0 :(得分:0)

  

如果我导入* -Swift.h文件,当文件包含在头文件中包含的另一个文件中时,我会进入丑陋的循环。

好的,但这就是你必须要做的。我没有看到你在上面的屏幕截图中这样做,这就是你的协议没有被看到的原因。

“丑陋循环”的解决方案应该只是调整 order ,在其中导入各种Objective-C文件。

答案 1 :(得分:0)

在Objective-c中采用swift协议是一个棘手的过程。我通过将采用类移植到Swift来解决了这个问题。

答案 2 :(得分:0)

我在项目中倾向于将ObjC类的协议一致性放在Swift文件中,以避免出现此错误。通常是定义协议的文件。

extension PalettaTraffic: ArrivingDelegate {}

为什么呢?我们将代码库从ObjC迁移到Swift,但我们无法同时迁移每个类。因此,我们有一个很大的&#39;似乎&#39; Swift&amp; ObjC,其中Swift类型需要ObjC,反之亦然。对我来说,这是能够立即减少工作量的解决方案。