gpt4 book ai didi

objective-c - 协议(protocol)和警告类别 "class does not implement protocol"

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:26:09 28 4
gpt4 key购买 nike

嗯,我有这两个协议(protocol):

@protocol ivAuthorizationProtocol <NSObject>
-(void)loginReply:(ivSession*)session;
@end
@protocol ivServerListsProtocol <NSObject>
-(void)serverListLoaded:(NSArray*)serverList;
@end

上课

@interface ivClientAppDelegate : NSObject <UIApplicationDelegate>
...
@end
@implementation
...
-(void)authorizeWithLogin:(NSString*)login andPassword:(NSString*)password
{
self.login = login;
self.password = password;
// !!! delegate in the next call should conform to ivAuthorizationProtocol,
// so i get warning "class does not implement protocol ivAuthoriaztionProtocol" here
[_apiWrapper authorizeWith:login andPassword:password forDelegate:self];
}
...
@end

我想将协议(protocol)方法的实现放在单独的文件(类别)中,以免弄乱主实现文件。例如,用于实现 ivAuthorizationProtocol 的类别的 header 如下所示:

#import "ivClientAppDelegate.h"

@interface ivClientAppDelegate (ivAuthorizationResponder) <ivAuthorizationProtocol>
-(void)loginReply:(ivSession*)session;
@end

所以,问题是——我怎样才能摆脱在主实现文件中收到的警告?我如何告诉编译器符合协议(protocol)的方法位于类别中?提前致谢!

最佳答案

您可以使用强制转换来消除警告:

[_apiWrapper
authorizeWith:login
andPassword:password
forDelegate:(id<ivAuthorizationProtocol>)self
];

除此之外,如果没有收到不同的警告(未实现的方法),您将无法做您想做的事。通常你会在接口(interface)中指定协议(protocol):

@interface ivClientAppDelegate : NSObject <UIApplicationDelegate,ivAuthorizationProtocol

但是您需要在主 @implementation block 中实现这些方法。

请注意,按照约定,类和协议(protocol)名称应以大写字符开头。

关于objective-c - 协议(protocol)和警告类别 "class does not implement protocol",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6706358/

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