繁体   English   中英

类型MCSessionState不符合协议“ AnyObject”

[英]Type MCSessionState does not conform to protocol 'AnyObject'

我通过以下代码收到此错误:

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

我正在使用MultipeerConnectivity :peerID的类型为MCPeerID(例如, MCPeerID(displayName: "morpheus") ),状态为MCSessionState(一个枚举,例如, MCSessionState.Connected )。 显然,我不能将枚举转换为AnyObject吗? 我该如何解决?

最好。

编辑:我尝试使用Dictionary <String,Any>,但是现在在下一个调用中出现异常。 这是代码:

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 

那里似乎有一些空指针,但是“ state”变量似乎很好...

注意:我注释了peerID分配。

AnyObject仅适用于类类型,请使用Any也支持枚举(参见docs )。

显然,我不能将枚举转换为AnyObject吗? 我该如何解决?

没错,AnyObject不能包含枚举。

我尝试使用Dictionary<String, Any> ,但是现在在下一个调用中出现异常。

NSNotificationCentre不需要快速的Dictionary ,它需要一个NSDictionary

DictionaryNSDictionary在任何可能的地方都可以互操作,但是NSDictionary只能将对象作为键和值。 您不能在字典中使用Any需要被obj-c API(例如NSNotificationCentre视为NSDictionary

因此,长话短说,通知用户信息字典必须是Dictionary<AnyObject, AnyObject> (或<String, String>或作为对象的东西)。 您将不得不使用除Enum之外的其他东西。

我认为您需要对字典值使用Any类型(因为AnyObject只能用于类的实例):

这为我在操场上工作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM