swift - 类型 'Class' 不符合协议(protocol) 'MCSessionDelegate'

标签 swift xcode mcsession

我正在努力将我的代码从 Swift 2.X 迁移到 3.X,并且已经解决了大部分运行时错误,除了不断出现的错误。 我拥有所有必需的功能,并已清理和删除派生数据,但它仍然说我的类不符合“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?){

}
}`

这是协议(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. 从扩展中删除所有功能

     extension Cashier: MCSessionDelegate.
    
  2. 您会看到缺少 subs 的错误,点击修复选项,它会自动添加所有必需的功能
  3. 如果上述 2 个步骤不起作用,请尝试清理构建文件夹并重新启动 Xcode

关于swift - 类型 'Class' 不符合协议(protocol) 'MCSessionDelegate',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51814325/

相关文章:

swift - 无法将类型 '[Message]' 的值转换为预期的参数类型 'Message'

ios - 带有自动布局的 Storyboard UITableViewCell

ios - 搜索栏 IOS 8 - 显示两个搜索栏

ios - 尝试放弃键盘时应用程序崩溃

ios - 使用 Parse.com 和 swift 在 tableView 中加载异步图像

ios - UIImage 在滚动之前不会显示在 TableView 单元格中

xcode - 尝试在 Swift 的多点连接测试应用程序中使用 NSNotification

swift - 如何将 NSTextField 值转换为 CGFloat

ios - 多点连接发送和接收 NSManagedObject