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

DictionaryNSDictionary尽可能互操作,但是NSDictionary只能有对象作为键和值。 你不能在一个需要被处理的字典中使用Any ,就像它是NSDictionary的一个obj-c API,比如NSNotificationCentre

因此,长话短说,通知userInfo字典必须是Dictionary<AnyObject, AnyObject> (或<String, String>或者是对象的东西)。 你将不得不使用一个枚举枚举。

AnyObject仅适用于类types,使用Any也支持枚举(cf. docs )。

我认为你需要为字典值使用Anytypes(因为AnyObject只能用于类的一个实例):

这对我来说在一个操场上工作:

 var dict: Dictionary<String, Any> = [ "peerID": peerID, "state": state ];