gpt4 book ai didi

Swift:无法将值 '(Bool, MCSession) -> Void' 分配给类型 '(Bool, MCSession!) -> Void!'

转载 作者:行者123 更新时间:2023-11-28 08:54:21 25 4
gpt4 key购买 nike

我正在尝试 this tutorial由于新的 swift 版本出现了一些错误,其中之一是 MPCManager 不符合协议(protocol) MCNearbyServiceAdvertiserDelegate。

我试图修复它,所以我将 func advertiser 的 header 更改为这个:

func advertiser(advertiser: MCNearbyServiceAdvertiser, didReceiveInvitationFromPeer peerID: MCPeerID, withContext context: NSData?, invitationHandler: (Bool, MCSession)->Void) {

然后它抛出一个错误

Cannot assign value '(Bool, MCSession) -> Void' to type '(Bool, MCSession!) -> Void!'

我不知道如何解决,感谢帮助!

实际文件:

    import UIKit
import MultipeerConnectivity

protocol MPCManagerDelegate {
func foundPeer()

func lostPeer()

func invitationWasReceived(fromPeer: String)

func connectedWithPeer(peerID: MCPeerID)
}

class MPCManager: NSObject, MCSessionDelegate, MCNearbyServiceBrowserDelegate, MCNearbyServiceAdvertiserDelegate {
var session: MCSession!
var peer: MCPeerID!
var browser: MCNearbyServiceBrowser!
var advertiser: MCNearbyServiceAdvertiser!

var foundPeers = [MCPeerID]()
var invitationHandler: (Bool, MCSession!)->Void!
var delegate: MPCManagerDelegate?

override init() {
super.init()

invitationHandler(false, nil)

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

session = MCSession(peer: peer)
session.delegate = self

browser = MCNearbyServiceBrowser(peer: peer, serviceType: "appcoda-mpc")
browser.delegate = self

advertiser = MCNearbyServiceAdvertiser(peer: peer, discoveryInfo: nil, serviceType: "appcoda-mpc")
advertiser.delegate = self
}

func browser(browser: MCNearbyServiceBrowser, foundPeer peerID: MCPeerID, withDiscoveryInfo info: [String : String]?) {
foundPeers.append(peerID)

delegate?.foundPeer()
}

func browser(browser: MCNearbyServiceBrowser, lostPeer peerID: MCPeerID) {
for (index, aPeer) in EnumerateSequence(foundPeers){
if aPeer == peerID {
foundPeers.removeAtIndex(index)
break
}
}

delegate?.lostPeer()
}

func browser(browser: MCNearbyServiceBrowser, didNotStartBrowsingForPeers error: NSError) {
print(error.localizedDescription)
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ THE Error occurs here: ~~~~~~~~~~~~~~~~~~~~~~
func advertiser(advertiser: MCNearbyServiceAdvertiser, didReceiveInvitationFromPeer peerID: MCPeerID, withContext context: NSData?, invitationHandler: (Bool, MCSession)->Void) {
self.invitationHandler = invitationHandler

delegate?.invitationWasReceived(peerID.displayName)
}

func advertiser(advertiser: MCNearbyServiceAdvertiser, didNotStartAdvertisingPeer error: NSError) {
print(error.localizedDescription)
}



func session(session: MCSession, peer peerID: MCPeerID, didChangeState state: MCSessionState) {
switch state{
case MCSessionState.Connected:
print("Connected to session: \(session)")
delegate?.connectedWithPeer(peerID)

case MCSessionState.Connecting:
print("Connecting to session: \(session)")

default:
print("Did not connect to session: \(session)")
}
}

func sendData(dictionaryWithData dictionary: Dictionary<String, String>, toPeer targetPeer: MCPeerID) -> Bool {
let dataToSend = NSKeyedArchiver.archivedDataWithRootObject(dictionary)
let peersArray = NSArray(object: targetPeer) as! [MCPeerID]

do {
_ = try session.sendData(dataToSend, toPeers: peersArray, withMode: MCSessionSendDataMode.Reliable)
} catch let error as NSError {
print(error.localizedDescription)
return false
}

return true
}

func session(session: MCSession, didReceiveData data: NSData, fromPeer peerID: MCPeerID) {
let dictionary: [String: AnyObject] = ["data": data, "fromPeer": peerID]
NSNotificationCenter.defaultCenter().postNotificationName("receivedMPCDataNotification", object: dictionary)
}

func session(session: MCSession, didStartReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, withProgress progress: NSProgress) { }

func session(session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, atURL localURL: NSURL, withError error: NSError?) { }

func session(session: MCSession, didReceiveStream stream: NSInputStream, withName streamName: String, fromPeer peerID: MCPeerID) { }

}

最佳答案

您使用 (Bool, MCSession!)->Void! 类型定义了 invitationHandler 变量,然后为其赋值 (Bool, MCSession)->Void) 类型。这就是导致您的错误消息的原因。

要解决此问题,请使用带有 invitationHandler 变量的参数匹配类型定义您的 advertiser 方法。

关于Swift:无法将值 '(Bool, MCSession) -> Void' 分配给类型 '(Bool, MCSession!) -> Void!',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33509118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com