gpt4 book ai didi

ios - swift 实现目标协议(protocol)

转载 作者:搜寻专家 更新时间:2023-10-31 08:08:26 25 4
gpt4 key购买 nike

我正试图在 swift 中从 Objective-C 实现这个可选的协议(protocol)方法:

- (void)customHTTPProtocol:(CustomHTTPProtocol *)protocol logWithFormat:
(NSString *)format arguments:(va_list)arguments;

( cfr: https://developer.apple.com/library/ios/samplecode/CustomHTTPProtocol/Introduction/Intro.html )我已经用 swift 编写了这个方法:

func customHTTPProtocol(`protocol`: CustomHTTPProtocol!, logWithFormat format: String!, arguments: CVaListPointer) {
}

它提示不能满足可选要求并建议在方法之前添加一个@objc,但是如果我添加@objc 它会给出一个错误(CVaListPointer cannot be represented in Objective-C)

问题是这个测试失败了:

if ([strongDelegate respondsToSelector:@selector(customHTTPProtocol:logWithFormat:arguments:)]) {

并且没有调用swift方法

最佳答案

如果你想在 swift 类中使用 objective-c @protocol 那么你必须将 objective-c 类导入到你的 Bridging-Header 文件中,当你在你的快速项目。然后显然你必须在 swift 文件中添加委托(delegate),你必须像使用它一样。

class classname : baseClass<yourDelegate> {

}

在此文件中,首先您必须添加所有必需的委托(delegate)方法,然后添加您必须使用的可选方法。如果您没有添加所需的委托(delegate)方法,则会出现错误。

但是,如果你想使用 protocol 从 swift 到 objective-c,那么你必须在 protocol 名称之前添加 @objc 并将 swift 文件导入 objective-c 文件,您还像这样在类之前添加了@objc,

@objc protocol DelegateName {
//declare your required and optional delegate method here
}

@objc classname : baseClass<yourDelegate> {

}

然后像这样将您的 swift 类导入到您的 objective-c 文件中,

#import <PROJ_NAME/PROJ_DIR-Swift.h>

重要的是要补充:

classObj.delegate = self

关于ios - swift 实现目标协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33751351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com