【问题标题】:transferUserInfo(_:) doesn't support sending classestransferUserInfo(_:) 不支持发送类
【发布时间】:2021-10-15 20:23:59
【问题描述】:

我正在尝试使用 WatchConnectivity 库将数据从手表传输到 iPhone。使用 transferUserInfo(_:) 方法,我发现我可以传输任何结构体,可以是 Int、Double 或 String,但不能传输带有数据的类。

有趣的是,文档将函数描述为:

func transferUserInfo(_ userInfo: [String : Any] = [:]) -> WCSessionUserInfoTransfer

因此,我将 Any 视为任何结构或类。我没有具体读到该方法不支持传输类。我是否应该从参数描述中的句子中读到这一点:“您要发送的属性列表的字典”?

是否有人对这种方法有比我从信息中得到的更深入的了解?

【问题讨论】:

  • 我认为“属性列表值”是重要的部分。它肯定可以更明确。请记住,这是来自 Obj-C 而不是 Swift。例如,在更现代的 API 中,我希望它接受 Codable,但这不是纯 Swift 的情况。
  • @jnpdx,你说得对,我不是一个好的读者:)。字典只能是属性列表值,并且只支持有限数量的值。谢谢。
  • 您好 jnpdx,如果您将您的评论放在一个精心制定的答案中,我可以奖励您积分。

标签: swift watchkit watchconnectivity


【解决方案1】:

文档指定userInfo参数为:

您要发送的属性列表值的字典

“属性列表”这一点很重要。如果您查看Property List Programming Guide,我们可以看到属性列表值的数据类型是:

CFString、CFNumber、CFBoolean、CFDate 和 CFData

(当我们在这些上下文中使用它们时,它们会桥接到适当的 Objective-C 和 Swift 类型。此外,这些类型的字典和数组也可以工作。)

不应期望在运行时将您自己的 class 类型作为值包含在 userInfo 中(尽管它不会引发编译时错误)。

【讨论】:

    猜你喜欢
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    相关资源
    最近更新 更多