【问题标题】:Swift - Incorrect argument label in call with bindToPortSwift - 使用 bindToPort 调用时参数标签不正确
【发布时间】:2016-06-01 16:34:11
【问题描述】:

我正在尝试将 CocoaAsyncSocket 库与 Swift 一起使用。

我想实现一个 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 上遇到了这个错误:

调用中的参数标签不正确(有 ':error:',应为 ':interface:')

查看库中bindToPort方法的声明,有一个原型对应我的实现。

- (BOOL)bindToPort:(UInt16)port error:(NSError **)errPtr

为什么即使原型受到尊重,我仍然会收到此错误?

【问题讨论】:

    标签: ios swift cocoaasyncsocket


    【解决方案1】:

    Objective-C 函数动态调整为使用 Swift 的错误处理范例,throws 而不是使用 NSError 参数。

    如果 Objective-C 方法的最后一个非块参数是 NSError ** 类型,Swift 将其替换为 throws 关键字,表示该方法可以抛出错误。如果 Objective-C 方法的错误参数也是它的第一个参数,Swift 会尝试通过从选择器的第一部分删除“WithError”或“AndReturnError”后缀(如果存在)来进一步简化方法名称。如果使用结果选择器声明了另一个方法,则方法名称不会更改。 - Using Swift with Cocoa and Objective-C (Swift 2.2) - Error Handling

    【讨论】:

    • 好的!我删除了错误参数并且它有效!谢谢!
    • 如果这解决了您的问题,请投票并接受:)
    • 我已经接受了这个答案,但不幸的是我没有足够的声望来投票。
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 2018-03-05
    • 2014-07-25
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多