我试图在Swift中使用CocoaAsyncSocket库。
我想实现UDP服务器和客户端。我已经导入了库,这是我的方法实现之一:
func setupConnection(){
var error : NSError?
socket = GCDAsyncUdpSocket(delegate: self, delegateQueue: dispatch_get_main_queue())
do {
try socket.bindToPort(PORT, error: &error)
try socket?.connectToHost(IP, onPort: PORT)
try socket.beginReceiving()
} catch _ {
print(error)
}
send("ping")
}
不幸的是我在bindToPort上遇到了这个错误:
调用中的参数标签不正确(有' :错误:',预期 ' :接口:&#39)
查看库中bindToPort方法的声明,我有一个与我的实现相对应的原型。
- (BOOL)bindToPort:(UInt16)port error:(NSError **)errPtr
为什么即使原型得到尊重,我仍然会遇到此错误?
答案 0 :(得分:2)
Objective-C函数动态地适应使用Swift的错误处理范例,throws
而不是使用NSError
参数。
如果Objective-C方法的最后一个非块参数是NSError **类型,则Swift将其替换为throws关键字,以指示该方法可能引发错误。如果Objective-C方法的error参数也是它的第一个参数,Swift会尝试通过从选择器的第一部分删除“WithError”或“AndReturnError”后缀(如果存在)来进一步简化方法名称。如果使用结果选择器声明了另一个方法,则不更改方法名称。 - Using Swift with Cocoa and Objective-C (Swift 2.2) - Error Handling