使用 Swift 协议时短路
Short-circuit when using a Swift protocol
众所周知,不可能从 -Header.h 中的文件中包含接口头文件。
我的实际问题是我有一个 class 协议的定义,其中一个协议是 Swift 一个:
@protocol arrivingDelegate;
@interface palettaTraffic : NSObject<MKMapViewDelegate, arrivingDelegate> {
}
如果我导入 *-Swift.h 文件,当该文件包含在头文件中包含的另一个文件中时,我会进入丑陋的循环。
这就是我使用@protocol 指令时发生的情况:这是一个警告,但非常令人不安。
swift 协议是这样定义的:
@objc public protocol arrivingDelegate {
func submitManualBusLine(busStripe:StripeProtocol)
}
我也找到了类似的post:
Swift protocol in Objective-C class
但是 none 的建议似乎适用。
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.
好的,但这就是你必须做的。我没有看到你在上面的屏幕截图中这样做,这就是为什么你的协议没有被看到的原因。
"ugly cycle" 的解决方案应该只是调整 order 的问题,其中将内容导入到您的各种 Objective-C 文件中。
在 Objective-c 中采用 swift 协议是一个棘手的过程。我也通过将采用 class 移植到 Swift 来解决这个问题。
我倾向于在我的项目中做的是将 ObjC class 的协议一致性放在 Swift 文件中,以避免此错误。通常是定义协议的文件。
extension PalettaTraffic: ArrivingDelegate {}
为什么?我们正在将我们的代码库从 ObjC 迁移到 Swift,但我们不能同时迁移每个 class。因此,我们在 Swift 和 ObjC 之间有一个很大的 'seem',其中 Swift 类型需要 ObjC,反之亦然。对我来说,这是立即导致最少工作量的解决方案。
众所周知,不可能从 -Header.h 中的文件中包含接口头文件。 我的实际问题是我有一个 class 协议的定义,其中一个协议是 Swift 一个:
@protocol arrivingDelegate;
@interface palettaTraffic : NSObject<MKMapViewDelegate, arrivingDelegate> {
}
如果我导入 *-Swift.h 文件,当该文件包含在头文件中包含的另一个文件中时,我会进入丑陋的循环。
这就是我使用@protocol 指令时发生的情况:这是一个警告,但非常令人不安。
swift 协议是这样定义的:
@objc public protocol arrivingDelegate {
func submitManualBusLine(busStripe:StripeProtocol)
}
我也找到了类似的post: Swift protocol in Objective-C class
但是 none 的建议似乎适用。
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.
好的,但这就是你必须做的。我没有看到你在上面的屏幕截图中这样做,这就是为什么你的协议没有被看到的原因。
"ugly cycle" 的解决方案应该只是调整 order 的问题,其中将内容导入到您的各种 Objective-C 文件中。
在 Objective-c 中采用 swift 协议是一个棘手的过程。我也通过将采用 class 移植到 Swift 来解决这个问题。
我倾向于在我的项目中做的是将 ObjC class 的协议一致性放在 Swift 文件中,以避免此错误。通常是定义协议的文件。
extension PalettaTraffic: ArrivingDelegate {}
为什么?我们正在将我们的代码库从 ObjC 迁移到 Swift,但我们不能同时迁移每个 class。因此,我们在 Swift 和 ObjC 之间有一个很大的 'seem',其中 Swift 类型需要 ObjC,反之亦然。对我来说,这是立即导致最少工作量的解决方案。