【问题标题】:Conversion to Swift 3 issue转换为 Swift 3 问题
【发布时间】:2016-09-27 08:40:12
【问题描述】:

我正在关注这个很好的教程,并下载了相关项目:https://www.ralfebert.de/tutorials/ios-swift-multipeer-connectivity/

然后,我在 XCode 中打开它并将其转换为 Swift 3。

在代码中,有这样的:

func browser(browser: MCNearbyServiceBrowser!, foundPeer peerID: MCPeerID!, withDiscoveryInfo info: [NSObject : AnyObject]!) {
  NSLog("%@", "foundPeer: \(peerID)")
  NSLog("%@", "invitePeer: \(peerID)")
  browser.invitePeer(peerID, toSession: self.session, withContext: nil, timeout: 10)
}

XCode 将其转换为:

func browser(_: MCNearbyServiceBrowser, foundPeer: MCPeerID, withDiscoveryInfo: [String : String]?){
  //...
  browser.invitePeer(MCPeerID, to: self.session, withContext: nil, timeout: 10)
}

如您所见,第一个参数不再是browser:这导致该方法无法调用invitePeer(此时没有人知道browser 是什么)。

如何将我的代码转换为调用invitePeer 并尊重新签名?

【问题讨论】:

    标签: ios migration swift3


    【解决方案1】:

    请像下面这样更改,Xcode 迁移将在方法第一个参数之前添加 _

      func browser(_ browser: MCNearbyServiceBrowser, foundPeer: MCPeerID, withDiscoveryInfo: [String : String]?){
          //...
          browser.invitePeer(MCPeerID, to: self.session, withContext: nil, timeout: 10)
        }
    

    【讨论】:

    • 我立即尝试了这个,但 XCode 没有消除错误
    • 完全重启XCode后就可以了,非常感谢
    【解决方案2】:

    试试这个:

    func browser(_ browser: MCNearbyServiceBrowser!,
                 foundPeer peerId: MCPeerID!,
                 withDiscoveryInfo info: [String : String]!) {
      browser.invitePeer(peerId, toSession: self.session, withContext: nil, timeout: 10)
      // not sure if invitePeer was converted too but in any case
      // browser.invitePeer(peerId, to: self.session, withContext: nil, timeout: 10)
    }
    

    现在从 Swift3 开始,您必须在函数声明中为您的第一个参数名称提供一个标签,或者如果您不想为您的第一个参数调用带有显式标签的 func,则至少提供一个下划线 (_)。

    【讨论】:

    • XCode 本身以这种方式“修复”了一些东西(没有标签)
    猜你喜欢
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多