You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WatchConnectivity中transferUserInfo(_:)无法传输类问题咨询

根本原因

你的判断完全正确,这个限制确实来自参数描述里提到的**property list values(属性列表值)**要求。

虽然Swift语法层面transferUserInfo(_:)的[String: Any]参数支持存放任意类型,但WatchConnectivity底层需要将传输的字典序列化为属性列表(plist)格式完成跨设备的进程间通信,而plist格式对可存储的类型有严格的白名单限制,任意自定义类都不在这个白名单内。

合法的属性列表类型仅包含以下原生类型:

  • 数值类型:Int、UInt、Float、Double、Bool
  • 基础容器/值类型:String、Data、Date
  • 集合类型:Array(元素必须是合法的属性列表类型)、Dictionary(key必须为String类型,value必须是合法的属性列表类型)

即使是继承自NSObject的自定义类,也无法直接放到userInfo中传输。

解决方案

你需要先将自定义类实例转换为属性列表支持的类型再传输,常用两种实现方案:

  1. 让自定义类遵从Codable协议,将实例编码为Data类型后放入传输字典,接收端收到Data后再解码还原为类实例
  2. 手动实现序列化逻辑,将类的所有属性拆解为原生属性列表类型组成的字典,传输该字典,接收端再通过字典属性初始化还原类实例

额外提示:即使是系统提供的非属性列表类型(比如UIImage、UIColor)也不能直接传输,都需要先转换为Data或者其他plist兼容类型再传递。

内容的提问来源于stack exchange,提问作者MacUserT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:09:04