iOS11 Swift 4 - 如何检查 Swift 类是否符合 Objective-C 中定义的协议?



我有一个遗留的代码库,里面有用Objective-C编写的代码。我正在添加一个用 Swift 编写的新类,它必须符合 Objective-C 中定义的现有协议。

如何确保我的 Swift 类正确实现 Objective-C 协议中定义的方法?

//In Obj-C
@protocol OBJCLocationObserver <NSObject>
- (void)didUpdateLocationWithModel:(nullable Model *)locationModel
lastLocation:(CLLocationCoordinate2D)lastLocation;
@end

//In Swift
extension SwiftLocationManager : OBJCLocationObserver
{
public func didUpdateLocation(with model: Model?, lastLocation: CLLocationCoordinate2D) {
// How to verify this function signature is actually conforming to the Obj-C protocol and is not a new method?
}
}
[MyClass conformsToProtocol:@protocol(MyProtocol)];

根据Apple Docs,您可以使用conformsToProtocol:返回一个布尔值,该值指示接收器是否符合给定的协议。


@protocol MyProtocol
- (void)helloWorld;
@end
@interface MyClass : NSObject <MyProtocol>
@end

将公开为:

console.log(MyClass.conformsToProtocol(MyProtocol)); 
var instance = MyClass.alloc().init();
console.log(instance.conformsToProtocol(MyProtocol))

确保将协议定义文件#import<ProjectName>-Bridging-Header.h文件中:

#import "OBJCLocationObserver.h"

然后,如果您的签名不匹配,您应该会看到错误消息。

您也可以使用 Xcode自动补全。类型:

public func didUpdateLocation

自动完成建议:

public func didUpdateLocation(withModel Model?, lastLocation: CLLocationCoordinate2D)

这与你所拥有的不同,并解释了为什么它不起作用。


这是获取接口的另一种方法:

正如@MartinR对另一个问题的评论中所建议的那样:

转到定义协议的头文件,然后选择 左上角"相关项目"弹出窗口中的"生成的界面" 角落。这将向您显示确切的 Swift 方法签名 必须实施。

相关内容

  • 没有找到相关文章

最新更新