发送一个枚举,该枚举是字典上的元组并返回



我是 Swift 的新手,所以请原谅我的无知。

我有这个枚举:

public enum ConnectionResult {
case values(state: MCSessionState, peerID:MCPeerID)
}

我把它放在字典上

let dict = ["values" : ConnectionResult.values(state:state, peerID:peerID)]

我通过通知发送此字典

NotificationCenter.default.post(name: .adjustState, object: dict)

当我收到通知时,我想取回statepeerID

@objc private func onAdjustState(_ notification:Notification) {
if let dict = notification.object as? Dictionary<String,Any>,
let result = dict["values"] as? ConnectionResult {
}

如何从结果中获取状态和对等 ID?

我试过了

let state = result.values.state as? MCSessionState

我试过了

let (state, peerID) = result  // the thing is a tuple, right?

没有成功...

顺便问一下,有没有办法直接在通知上发送这个ConnectionResult对象,即元组,而不是使用字典?

ConnectionResult不是元组。它是一个只有一个情况的枚举(这有点违背枚举的目的(,所以你需要像处理枚举一样处理它。

要获得statepeerID

if case .values(let state, let peerID) = result {
// you can access "state" and "peerID" here
} else {
// this will never be reached
}

正如您可能知道的那样,枚举不适合这里。我建议更改为实际元组:

// create the dict like this
let dict = ["values" : (state:state, peerID:peerID)]
// get state and peerID like this
if let result = dict["values"] as? (state: MCSessionState, peerID: MCPeerID) {
let (state, peerID) = result
} else {
// handle "dict["values"] as? (state: MCSessionState, peerID: MCPeerID)" being nil
}

struct

struct ConnectionResult {
let state: MCSessionState
let peerID: MCPeerID
}
// create the dict like this
let dict = ["values" : ConnectionResult(state:state, peerID:peerID)]
// get state and peerID like this
if let result = dict["values"] as? ConnectionResult {
let (state, peerID) = (result.state, result.peerID)
} else {
// handle "dict["values"] as? ConnectionResult" being nil
}

您也可以直接发送结构/元组,而无需先将其放入字典中,因为object参数接受Any?。您只需要将notification.object直接转换为结构类型或元组类型。

最新更新