Short-circuit when using a Swift protocol

ε祈祈猫儿з 提交于 2019-12-11 12:54:58

问题


As known, it is not possible to include the interface header file from a file in the -Header.h. My actual problem is that I have the definition of a class one protocol of which is a Swift one:

@protocol arrivingDelegate;

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

If I import the *-Swift.h file I get into the ugly cycle when the file is included in another one that is included in the header file.

This is what happens when I use the @protocol directive: it is a warning, but quite a disturbing one.

This is how the swift protocol is defined:

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

I also found a similar post: Swift protocol in Objective-C class

But none of the suggestions seem to apply.


回答1:


If I import the *-Swift.h file I get into the ugly cycle when the file is included in another one that is included in the header file.

Okay, but that is what you have to do. I don't see you doing it the screen shot above, which is why your protocol is not being seen.

The solution to the "ugly cycle" should be just a matter of tweaking the order in which things are imported in your various Objective-C files.




回答2:


Adopting swift protocols in Objective-c is a tricky process. I fixed the issue by porting the adopting class to Swift too.




回答3:


What I tend to do in my projects is putting the protocol conformance of the ObjC class in a Swift file, to avoid this error. Usually the file where the protocol is defined.

extension PalettaTraffic: ArrivingDelegate {}

Why? We're migrating our codebase from ObjC to Swift, but we cannot migrate every class at the same time. Because of this we have a large 'seem' between Swift & ObjC where Swift types need ObjC and vice versa. For me, this is the solution that causes the least amount of work right away.



来源:https://stackoverflow.com/questions/31629825/short-circuit-when-using-a-swift-protocol

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!