typesMCSessionState不符合协议“AnyObject”
我收到以下代码的错误:
var dict: Dictionary<String, AnyObject> = [ "peerID": peerID, "state": state ]
我正在使用MultipeerConnectivity
:peerID的types为MCPeerID(例如, MCPeerID(displayName: "morpheus")
),并且状态是MCSessionState(枚举,例如, MCSessionState.Connected
)。 显然,我不能将枚举转换为AnyObject? 我该如何解决这个问题?
最好。
编辑:我尝试使用Dictionary <String,Any>,但现在我在下一个调用中得到一个exception。 代码如下:
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表示“userInfo:dict”行,例外:
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
那里似乎有一些空指针,但“状态”variables似乎很好…
注意:我注释了peerID分配。
显然,我不能将枚举转换为AnyObject? 我该如何解决这个问题?
这是正确的,AnyObject不能包含枚举。
我尝试使用
Dictionary<String, Any>
,但现在我在下一个调用中得到一个exception。
NSNotificationCentre不需要一个快速的Dictionary
,它需要一个NSDictionary
。
Dictionary
和NSDictionary
尽可能互操作,但是NSDictionary
只能有对象作为键和值。 你不能在一个需要被处理的字典中使用Any
,就像它是NSDictionary
的一个obj-c API,比如NSNotificationCentre
。
因此,长话短说,通知userInfo字典必须是Dictionary<AnyObject, AnyObject>
(或<String, String>
或者是对象的东西)。 你将不得不使用一个枚举枚举。
AnyObject
仅适用于类types,使用Any
也支持枚举(cf. docs )。
我认为你需要为字典值使用Any
types(因为AnyObject只能用于类的一个实例):
这对我来说在一个操场上工作:
var dict: Dictionary<String, Any> = [ "peerID": peerID, "state": state ];