- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试 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/
我正在尝试 this tutorial由于新的 swift 版本出现了一些错误,其中之一是 MPCManager 不符合协议(protocol) MCNearbyServiceAdvertiserDe
我正在使用 Multipeer-Connectivity。 当 session 结束时,应用程序进入主菜单,所有网络内容都被释放然后被释放。 但我的 dealloc 方法在主线程中被调用,MCSess
我正在使用 Mutipeer Connectivity 制作聊天应用程序。一开始,一切正常,MCSession 可以相互连接。但是,当用户点击主页按钮,然后点击应用程序图标时,应用程序之间会断开连接,
我在钥匙串(keychain)中创建了一个自签名证书,我正在使用 MultipeerConnectivity 框架在设备之间传输数据。 当我们创建 session 时,我们可以在 MCSession
我让我的模拟器和手机互相看到对方,并且充当浏览器的手机邀请广告商加入 session 。但是,我在两边看到的唯一 2 个状态变化是 .Connecting 和 .NotConnected。我从未见过。
为了避免成为XY问题,我先说明一下情况。 我正在开发一款游戏,其中多个设备可以相互连接以进行多人游戏。为此,我正在使用 Multipeer Connectivity。该游戏支持 2-4 名玩家。 现在
我正在使用框架 MultipeerConnectivity 在设备之间发送文件。我了解到默认情况下这个框架最多可以连接 8 个设备,所以在我的例子中我想将它减少到只有 2 个设备(在这种情况下是我的和
如果我有一组连接的对等点,假设 3 (a->b, a->c, a->d)我只想断开对等点“c”的连接,我应该怎么做? 我看到一个类似问题的回复说你只能断开“你自己”与 session 的连接:这意味着
我正在使用 MCNearbyServiceBrowser 和 MCNearbyServiceAdvertiser 将两个对等方加入 MCSession。我可以使用 MCSession 的 sendDa
我读到 MCSession 的限制是 8 个设备。我打算拥有一个主机设备,它可以与其他设备建立许多一对一的连接。在这种情况下,限制仍然是 7 个连接的设备,还是可以有更多的 MCSession 实例?
我正在使用 WWDC 2018 中推出的 ARKit 2.0 测试 Apple 的多用户 AR 演示应用程序:Creating a multiuser AR experience . 文档说,在每个设
我是一名优秀的程序员,十分优秀!