简体   繁体   English

类型“类”不符合协议“ MCSessionDelegate”

[英]Type 'Class' does not conform to protocol 'MCSessionDelegate'

I'm working on migrating my code from Swift 2.X to 3.X and have already resolved majority of my runtime error except one that keeps on bugging out. 我正在将代码从Swift 2.X迁移到3.X,并且已经解决了我的大部分运行时错误,但其中一个错误一直存在。 I have all the required functions and have cleaned and deleted the derived data but it still saying that my class does not conform to 'MCSessionDelegate'. 我具有所有必需的功能,并且已清理并删除了派生数据,但仍然说我的课程不符合“ MCSessionDelegate”。 ` `

import MultipeerConnectivity
import Foundation

class Cashier: Advertiser
{
var waiterBecomesConnectedHandler: ((MCPeerID) -> Void)?
var waiterBecomesDisconnectedHandler: ((MCPeerID) -> Void)?
}

extension Cashier: MCSessionDelegate
{

@available(iOS 7.0, *)
func session(_ session: MCSession, didStartReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, with progress: Progress) {

}

@available(iOS 7.0, *)
func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) {
    switch state {
        case .notConnected:
            waiterBecomesDisconnectedHandler?(peerID)
            connectedPeerSessions.removeValue(forKey: peerID)
            break

        case .connected:
            waiterBecomesConnectedHandler?(peerID)
            break

        case .connecting:
            break
    }
}


@available(iOS 7.0, *)
func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) {

}

@available(iOS 7.0, *)
func session(_ session: MCSession, didReceive stream: InputStream, withName streamName: String, fromPeer peerID: MCPeerID) {

}


@available(iOS 7.0, *)
func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, at localURL: URL, withError error: Error?){

}
}`

Here is the code for the protocol ` 这是协议的代码

// Delegate methods for MCSession.
public protocol MCSessionDelegate : NSObjectProtocol {


// Remote peer changed state.
@available(iOS 7.0, *)
public func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState)


// Received data from remote peer.
@available(iOS 7.0, *)
public func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID)


// Received a byte stream from remote peer.
@available(iOS 7.0, *)
public func session(_ session: MCSession, didReceive stream: InputStream, withName streamName: String, fromPeer peerID: MCPeerID)


// Start receiving a resource from remote peer.
@available(iOS 7.0, *)
public func session(_ session: MCSession, didStartReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, with progress: Progress)


// 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.
@available(iOS 7.0, *)
public func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, at localURL: URL, withError error: Error?)


// Made first contact with peer and have identity information about the
// remote peer (certificate may be nil).
@available(iOS 7.0, *)
optional public func session(_ session: MCSession, didReceiveCertificate certificate: [Any]?, fromPeer peerID: MCPeerID, certificateHandler: @escaping (Bool) -> Swift.Void)
}`
  1. Remove all the functions from the extension 从扩展中删除所有功能

      extension Cashier: MCSessionDelegate. 
  2. You'll see the error missing subs, click on fix option and it'll add all the required func automatically 您会看到错误缺少子代码的错误,单击修复选项,它将自动添加所有必需的功能
  3. if above 2 steps doesn't work , try cleaning the build folder and restart Xcode 如果以上两个步骤均无效,请尝试清理构建文件夹并重新启动Xcode

One of your delegate methods is wrong. 您的委托方法之一是错误的。 at localURL: URL should be at localURL: URL? at localURL: URL应该at localURL: URL?

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

https://developer.apple.com/documentation/multipeerconnectivity/mcsessiondelegate/1406984-session https://developer.apple.com/documentation/multipeerconnectivity/mcsessiondelegate/1406984-session

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM