xcode 8 swift 3 中多点连接框架中对成员“会话(_:peer:didChange)”错误的模糊引用

Posted

技术标签:

【中文标题】xcode 8 swift 3 中多点连接框架中对成员“会话(_:peer:didChange)”错误的模糊引用【英文标题】:Ambiguous reference to member 'session(_:peer:didChange)' error in multipeer connectivity framework in xcode 8 swift 3 【发布时间】:2017-03-15 19:25:21 【问题描述】:

我一直在研究多点连接框架。在初始化会话对象时,我收到一条错误消息,指出“对成员 'session(_:peer:didChange)' 的引用不明确”。我在创建类时遇到了同样的错误同一会话对象的委托。这是代码实现。任何建议都会有所帮助,因为我是这个框架的新手。提前致谢:)

#
import UIKit

import MultipeerConnectivity

var session : MCSession!

var peer : MCPeerID!

var browser : MCNearbyServiceBrowser!

var advertiser : MCNearbyServiceAdvertiser!


var foundPeers = [MCPeerID]()

var invitationHandler : ((Bool, MCSession?)->Void)!


class MCPManager: NSObject,MCSessionDelegate


    public func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState)
    
        return
    

    public func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID)
    
        return
    


    public func session(_ session: MCSession, didReceive stream: InputStream, withName streamName: String, fromPeer peerID: MCPeerID)
    
        return
    

    public func session(_ session: MCSession, didStartReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, with progress: Progress)
    
        return
    

    public func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, at localURL: URL, withError error: Error?)
    
        return
    

    override init()
    
        super.init()

        peer = MCPeerID(displayName: UIDevice.current.name)

        session = MCSession(peer: peer) // Ambiguous reference to member 'session(_:peer:didChange)' 

        session.delegate = self  //Ambiguous reference to member 'session(_:peer:didChange)' 
      

【问题讨论】:

根据您的init() 的代码,我想知道您是否想要MCPManager 类中的所有这些 var 声明...是吗? 是的......这个初始化方法将在创建会话时被调用......你能找到错误的任何原因......提前谢谢:) 【参考方案1】:

当您在MCPManager 中说session 时,编译器正在尝试解析您正在定义的一些MCSessionDelegate 函数,并且由于调用不完整而无法消除歧义。但是,您似乎正在尝试分配在外部范围中定义的这些变量之一。我认为您真正想要的是将所有这些变量移到您的 MCPManager 类的定义中,如下所示:

import UIKit
import MultipeerConnectivity

class MCPManager: NSObject, MCSessionDelegate 
    var session : MCSession!
    var peer : MCPeerID!
    var browser : MCNearbyServiceBrowser!
    var advertiser : MCNearbyServiceAdvertiser!
    var foundPeers = [MCPeerID]()
    var invitationHandler : ((Bool, MCSession?)->Void)!

    override init() 
        super.init()
        peer = MCPeerID(displayName: UIDevice.current.name)
        session = MCSession(peer: peer)
        session.delegate = self
    

    // MCSessionDelegate methods ommited

这个编译,我希望它是你想要的。

【讨论】:

非常感谢:)

以上是关于xcode 8 swift 3 中多点连接框架中对成员“会话(_:peer:didChange)”错误的模糊引用的主要内容,如果未能解决你的问题,请参考以下文章

多点连接 tvOS swift 的替代方案

Xcode 8 Objective-c项目导入第三方swift框架(以Charts框架为例)

使用 Xcode 8.3 的通用框架?

updateChat上的ios 8多点连接错误

带有 xCode 8 的 RealmSwift

在 xcode / swift 3 中点击视图以“选择”它