我试图用 swift 重写我的 GameKit 多人游戏(本地),并且遇到了一些缺少该语言文档的问题。我想从另一个对等方接收数据,所以我为我的 GKSession 设置了 dataReceiveHandler,如下所示:
session.setDataReceiveHandler(self, withContext: nil)
在苹果文档中,它说 dataReceiveHandler 必须实现具有此签名的方法:
SEL = -receiveData:fromPeer:inSession:context:
在objective-c文档中是一个签名应该是什么样子的例子:
- (void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context;
如果我尝试快速重写此方法,它看起来像这样:
func receiveData(data: NSData, fromPeer peer: String, inSession session: GKSession, withContext context: CMutableVoidPointer) {
println("received data: \(data)")
}
当我收到一条消息时给我这个错误:
Domain=com.apple.gamekit.GKSessionErrorDomain Code=30500 "Invalid parameter for -setDataReceiveHandler:withContext:" UserInfo=0x178462840 {NSLocalizedDescription=Invalid parameter for -setDataReceiveHandler:withContext:, NSLocalizedFailureReason=处理程序没有响应正确的选择器。}
这意味着我的方法没有正确的签名。但是什么是正确的?