我使用以下代码收到此错误:
var dict: Dictionary<String, AnyObject> = [
"peerID": peerID,
"state": state
]
我使用MultipeerConnectivity
:peerID属于MCPeerID类型(例如,MCPeerID(displayName: "morpheus")
),状态是MCSessionState(枚举,例如MCSessionState.Connected
)。显然,我无法将枚举转换为AnyObject?我该如何解决这个问题?
最佳。
编辑:我尝试使用Dictionary&lt; String,Any&gt;,但现在我在下次调用时遇到异常。这是代码:
func session(session: MCSession!, peer peerID: MCPeerID!, didChangeState state: MCSessionState) {
var dict: Dictionary<String, Any> = [
"peerID": peerID,
"state": state
]
NSNotificationCenter.defaultCenter().postNotificationName(
"MCDidChangeStateNotification",
object: nil,
userInfo: dict
)
}
Xcode表示&#34; userInfo:dict&#34;除了以下行:
Thread 10: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
也许这不会告诉你什么,所以我可以发布哪些内容会有所帮助?
编辑:
通过在运行时检查对象(崩溃后),这就是我得到的:
state MultipeerConnectivity.MCSessionState Connecting Connecting
dict Swift.Dictionary<Swift.String, protocol<>>
[0] Swift._DictionaryElement<Swift.String, protocol<>>
key Swift.String "state"
core Swift._StringCore
value protocol<>
payload_data_0 Builtin.RawPointer 0x0
payload_data_1 Builtin.RawPointer 0x0
payload_data_2 Builtin.RawPointer 0x0
instance_type Builtin.RawPointer 0x0
那里似乎有一些空指针,但是&#34;状态&#34;变量似乎很好......
注意:我注释掉了peerID分配。
答案 0 :(得分:3)
AnyObject
仅适用于班级类型,使用Any
也支持枚举(参见docs)。
答案 1 :(得分:2)
显然,我无法将枚举转换为AnyObject?我该如何解决这个问题?
这是正确的,AnyObject不能包含枚举。
我尝试使用
Dictionary<String, Any>
,但现在我在下一次调用时遇到异常。
NSNotificationCentre没有采取快速Dictionary
,需要NSDictionary
。
只要有可能,Dictionary
和NSDictionary
可互操作,但NSDictionary
只能将对象作为键和值。您无法在字典中使用Any
,因为NSDictionary
等对象API需要将其视为NSNotificationCentre
。
因此,长话短说,通知userInfo字典必须是Dictionary<AnyObject, AnyObject>
(或<String, String>
或某个对象的东西。你将不得不使用Enum以外的东西。
答案 2 :(得分:1)
我认为您需要使用类型Any
作为字典值(因为AnyObject只能用于类的实例):
这在我的操场上工作:
var dict: Dictionary<String, Any> = [
"peerID": peerID,
"state": state
];