【问题标题】:Can't Use Object Property to Create Color in SwiftUISwiftUI 中无法使用对象属性创建颜色
【发布时间】:2020-01-16 23:54:30
【问题描述】:

我有一个 SwiftUI iOS 应用程序,它从本地 JSON 文件中提取数据。

一切正常,除了在一个视图中,我无法使用传递到视图中的对象的属性来创建新的Color

struct CategoryItem: View {
    var item: Item
    var body: some View {
        VStack(alignment: .leading) {
            ZStack {
                Rectangle()
                    .foregroundColor(Color(red: item.backgroundColor[0] / 255, green: 242 / 255, blue: 242 / 255))

由于某种原因,如果我使用String(item.backgroundColor[0]) 将其打印出来,item.backgroundColor[0] 会正确返回,因此该值存在,但计算会引发错误。我怀疑这与 Color 是一个计算属性这一事实有关,但我不确定为什么会发生错误。

任何帮助将不胜感激!

【问题讨论】:

  • 你能做一个最小的工作示例吗?我们无法访问Item,所以很难说发生了什么。
  • 哪个错误编译器或运行时?哪个item.backgroundColor[0] 值属于哪种类型?这个body 的其他代码是什么?需要更多详细信息,前提是快照不可测试。
  • 谢谢,这些对诊断问题很有帮助!在这种情况下,我在下面发布了答案。

标签: ios swift swiftui


【解决方案1】:

我想通了。

事实证明,item.backgroundColor[0] 需要指定为 Double(),即使静态整数(例如 255)表示为整数。

解决方案是使用如下函数将所有内容包装在 Double() 中:

func colorsFromProperty(colors: [Double]) -> Color {
  return Color(red: Double(colors[0] / 255), green: Double(colors[1] / 255), blue: Double(colors[2] / 255))
}

【讨论】: