GCDAsyncUdpSocket项目警告:发送ViewController至不兼容类型参数
解决GCDAsyncUdpSocket初始化时的类型不兼容警告
嗨,我来帮你搞定这个烦人的警告!这个问题其实很常见,原因很简单:你给GCDAsyncUdpSocket的初始化方法传了ViewController对象作为代理,但编译器不知道你的ViewController遵守了它要求的代理协议,所以才会抛出“类型不兼容”的警告。
下面是具体的解决步骤:
1. 在ViewController中声明遵守代理协议
打开你的ViewController.h文件,找到类声明的那一行,把它修改成这样:
#import <UIKit/UIKit.h> // 别忘了先导入UDP的头文件 #import "GCDAsyncUDPSocket.h" @interface ViewController : UIViewController <GCDAsyncUdpSocketDelegate> @end
这里关键是加上<GCDAsyncUdpSocketDelegate>,告诉编译器你的ViewController是符合这个代理协议要求的对象。
2. 可选:实现代理协议的方法(推荐)
虽然GCDAsyncUdpSocketDelegate里的大部分方法都是可选的,但为了让UDP功能正常工作,建议你至少实现接收数据的方法。在ViewController.m里添加:
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(nullable id)filterContext { // 这里处理接收到的UDP数据,比如转成字符串 NSString *receivedString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"收到UDP数据:%@", receivedString); }
做完这两步,那个类型不兼容的警告应该就消失啦!
内容的提问来源于stack exchange,提问作者Vollen




