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

Swift中如何通过点符号动态访问自定义类型的displayOrder属性?

解决Swift中动态访问不同类型共同属性的问题

Swift是强类型语言,和JavaScript的动态类型机制不同,不能直接把不同类型的实例混放进数组后直接访问共同属性,也不能通过字符串变量直接映射到实例属性。针对你的需求,最规范的解决方式是通过协议统一接口:

步骤1:定义包含共同属性的协议

先创建一个协议,声明两个结构体都有的displayOrder属性:

protocol DisplayOrderable {
    var displayOrder: Int { get set }
}

步骤2:让结构体遵守协议

修改你的结构体定义,让它们遵守这个协议(因为已经实现了displayOrder属性,不需要额外编写实现代码):

struct QuestionConfiguration: Codable, DisplayOrderable {
    var displayOrder: Int
}

struct PriorityConfiguration: Codable, DisplayOrderable {
    var displayOrder: Int
}

步骤3:使用协议类型数组动态访问属性

现在你可以把两个实例放进[DisplayOrderable]类型的数组里,直接访问每个元素的displayOrder:

var configs: [DisplayOrderable] = [questionConfiguration, priorityConfiguration]
// 假设i是合法的索引(0或1)
print(configs[i].displayOrder)

为什么你的原有写法不行?

  • 第一种写法:[self.questionConfiguration, self.priorityConfiguration]的类型是[Any],Any类型没有displayOrder属性,编译器无法识别。
  • 第二种写法:数组里存的是字符串字面量,字符串本身当然没有displayOrder属性,Swift也不会自动把字符串映射到当前上下文的实例变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:35:22