【发布时间】:2018-06-06 12:51:18
【问题描述】:
我正在编写一个简单的 P2P 聊天程序,到目前为止,我一直将 MCPeerID 的 displayName 属性作为字符串存储在我的模型中,以确定将特定消息发送给谁。在每次发送操作中,只要 displayName 与模型中的字符串匹配,我就会搜索 connectedPeers 数组并将 MCPeerID 复制到接收者列表中。
这在两个对等点具有相同名称的情况下可能会出现问题。而且我对每次发送都执行搜索也不满意。所以我试图在我的模型中直接使用 MCPeerIDs。但是,Xcode 抱怨 MCPeerID 不符合 Encodable 和 Decodable,我不知道如何解决这个问题。
我的模型代表一个主题,该主题维护参与者列表以及谁说了什么的日志。因此,我可以在新参与者加入时同步新参与者,并在添加新消息时更新现有参与者。我的模型如下所示:
import Foundation
import MultipeerConnectivity
class Task : Codable {
var uuidStr: String = UUID().uuidString
var topic : String
var history : [String] = []
var users : [MCPeerID] = []
...
private enum CodingKeys: String, CodingKey {
case uuidStr
case topic
case history
case users
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(uuidStr, forKey: .uuidStr)
try container.encode(topic, forKey: .topic)
try container.encode(history, forKey: .history)
try container.encode(users, forKey: .users)
}
...
}
(我没有展示标准的 init(),因为这不是问题所在。)
查看文档后,我看到一个带有签名 MCPeerID.init?(coder: NSCoder) 和 func encode(with: NSCoder) 的方法,但我不确定如何指定 NSCoder 参数。任何有关如何序列化 users 属性的帮助将不胜感激。
【问题讨论】:
-
这个你搞定了吗?
标签: ios json swift multipeer-connectivity