如何向SwiftUI的KeyValuePair<X,Y>中动态添加元素?
动态构建SwiftUI Charts图例的可行方案
你遇到的核心问题是KeyValuePairs是值类型,没有append方法,所以原来代码里尝试逐个追加元素的方式行不通。不过可以利用KeyValuePairs支持通过序列初始化的特性,直接动态生成所需的键值对集合。
修正后的代码如下:
var legend: KeyValuePairs<String, Color> { // 把所有plottableData转换成(String, Color)的序列 let legendPairs = rows.flatMap { row in row.plottableData.map { ($0.description, $0.color) } } // 直接用序列初始化KeyValuePairs return KeyValuePairs(legendPairs) }
这个方案的逻辑是:
- 用
flatMap遍历所有rows,再通过map把每个plottableData转换成对应的描述和颜色的元组 - 直接将这个元组序列传给
KeyValuePairs的初始化器,它会自动构建出符合要求的键值对集合
这样生成的legend就可以直接传入chartForegroundStyleScale修饰器,实现动态图例的需求,不需要手动创建视图。
内容的提问来源于stack exchange,提问作者Chris Marshall
相关产品推荐
相关产品推荐

