簡體   English   中英

Swift - MultipeerConnectivity類型不符合協議

[英]Swift - MultipeerConnectivity Type does not conform to protocol

我正在嘗試這個教程並且代碼有些問題:

class MPCManager: NSObject, MCSessionDelegate, MCNearbyServiceBrowserDelegate, MCNearbyServiceAdvertiserDelegate {

我收到一個錯誤:

類型'MPCManager'不符合協議'MCSessionDelegate'

類型'MPCManager'不符合協議'MCNearbyServiceBrowserDelegate'

類型'MPCManager'不符合協議'MCNearbyServiceAdvertiserDelegate'

但是我下載了它沒有得到相同錯誤的示例文件。 我錯過了哪一部分?

如果要符合這些協議,則需要實現MCSessionDelegateMCNearbyServiceBrowserDelegate以及MCNearbyServiceAdvertiserDelegate所需的所有委托方法。

您必須添加該協議的所有必需委托方法。

我在下面的代碼中添加了所有必需的方法:

import Foundation
import MultipeerConnectivity


class MPCManager: NSObject, MCSessionDelegate, MCNearbyServiceBrowserDelegate, MCNearbyServiceAdvertiserDelegate {

    //Type 'MPCManager' does not comform to protocol 'MCSessionDelegate'
    // Remote peer changed state
    func session(session: MCSession!, peer peerID: MCPeerID!, didChangeState state: MCSessionState){

    }

    // Received data from remote peer
    func session(session: MCSession!, didReceiveData data: NSData!, fromPeer peerID: MCPeerID!){

    }

    // Received a byte stream from remote peer
    func session(session: MCSession!, didReceiveStream stream: NSInputStream!, withName streamName: String!, fromPeer peerID: MCPeerID!){

    }

    // Start receiving a resource from remote peer
    func session(session: MCSession!, didStartReceivingResourceWithName resourceName: String!, fromPeer peerID: MCPeerID!, withProgress progress: NSProgress!){

    }

    // Finished receiving a resource from remote peer and saved the content in a temporary location - the app is responsible for moving the file to a permanent location within its sandbox
    func session(session: MCSession!, didFinishReceivingResourceWithName resourceName: String!, fromPeer peerID: MCPeerID!, atURL localURL: NSURL!, withError error: NSError!){

    }


    //Type 'MPCManager' does not comform to protocol 'MCNearbyServiceBrowserDelegate'

    // Found a nearby advertising peer
    func browser(browser: MCNearbyServiceBrowser!, foundPeer peerID: MCPeerID!, withDiscoveryInfo info: [NSObject : AnyObject]!){

    }

    // A nearby peer has stopped advertising
    func browser(browser: MCNearbyServiceBrowser!, lostPeer peerID: MCPeerID!){

    }

    //Type 'MPCManager' does not comform to protocol 'MCNearbyServiceAdvertiserDelegate'
    // Incoming invitation request.  Call the invitationHandler block with YES and a valid session to connect the inviting peer to the session.
    func advertiser(advertiser: MCNearbyServiceAdvertiser!, didReceiveInvitationFromPeer peerID: MCPeerID!, withContext context: NSData!, invitationHandler: ((Bool, MCSession!) -> Void)!){

    }

}

如果你想檢查特定委托所需的方法是什么,那么只需命令+點擊該委托就可以找到與該委托相關的所有方法,如果你命令+點擊MCSessionDelegate那么你會看到如下內容:

// Delegate methods for MCSession
protocol MCSessionDelegate : NSObjectProtocol {

    // Remote peer changed state
    func session(session: MCSession!, peer peerID: MCPeerID!, didChangeState state: MCSessionState)

    // Received data from remote peer
    func session(session: MCSession!, didReceiveData data: NSData!, fromPeer peerID: MCPeerID!)

    // Received a byte stream from remote peer
    func session(session: MCSession!, didReceiveStream stream: NSInputStream!, withName streamName: String!, fromPeer peerID: MCPeerID!)

    // Start receiving a resource from remote peer
    func session(session: MCSession!, didStartReceivingResourceWithName resourceName: String!, fromPeer peerID: MCPeerID!, withProgress progress: NSProgress!)

    // Finished receiving a resource from remote peer and saved the content in a temporary location - the app is responsible for moving the file to a permanent location within its sandbox
    func session(session: MCSession!, didFinishReceivingResourceWithName resourceName: String!, fromPeer peerID: MCPeerID!, atURL localURL: NSURL!, withError error: NSError!)

    // Made first contact with peer and have identity information about the remote peer (certificate may be nil)
    optional func session(session: MCSession!, didReceiveCertificate certificate: [AnyObject]!, fromPeer peerID: MCPeerID!, certificateHandler: ((Bool) -> Void)!)
}

只有最后一個方法是可選的,所以如果你不添加它你的委托工作正常,但你必須將所有上述5個方法添加到你的類中以符合協議。

希望它會有所幫助。

您需要實現委托的協議。 在xcode中鍵入函數時可以找到它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM