swift - 如何在 forEach 循环中传递变量函数

标签 swift swiftui xcode11

目标:

我目前正在编写一些代码来创建六边形网格,每个六边形都单独用渐变着色。然而,我对 swiftUI 还很陌生,并不完全理解为什么我的代码不起作用。

代码:

ForEach(0 ..< 11, id: \.self) { Xnum in
    ForEach(0 ..< 11, id: \.self) { Ynum in
        self.MyNewPath(in: CGRect(), Xcoord: Double(Xnum), Ycoord: Double(Ynum), Type: 1)
            .fill(RadialGradient(
                gradient: Gradient(colors: [Color.red, Color.blue]),
                center: .init(
                    x: self.gradientParametersX(Xpos: Double(Xnum)),
                    y: self.gradientParametersY(Ypos: Double(Ynum), Xpos: Double(Xnum))),
                startRadius: CGFloat(2.0),
                endRadius: CGFloat(70.0)))
            .gesture(
                TapGesture().onEnded {_ in
                    self.dataEditor(Xplace: Int(Xnum), Yplace: Int(Ynum))
                }
            )
    }
}

返回类型:

  • MyNewPath() - 路径(六边形)
  • gradientParametersY() - CGFloat
  • gradientParametersY() - CGFloat

错误:

编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式

错误似乎集中在将 XnumYnum 传递给函数 gradientParametersX()gradientParametersY().

例如,当我通过 7.0 和 0.0 时:

x: self.gradientParametersX(Xpos: Double(7.0)),
y: self.gradientParametersY(Ypos: Double(0.0), Xpos: Double(7.0))),

...没有错误。

最佳答案

尝试在单独的函数中单独创建网格项,如下所示(代码快照不可测试,因此只是草稿演示想法)

    ...
    ForEach(0 ..< 11, id: \.self) { Xnum in
        ForEach(0 ..< 11, id: \.self) { Ynum in
            self.createItem(for: Xnum, Ynum: Ynum)
        }
    }
    ...

private func createItem(for Xnum: Int, Ynum: Int) -> some View {
    self.MyNewPath(in: CGRect(), Xcoord: Double(Xnum), Ycoord: Double(Ynum), Type: 1)
        .fill(RadialGradient(
            gradient: Gradient(colors: [Color.red, Color.blue]),
            center: .init(
                x: self.gradientParametersX(Xpos: Double(Xnum)),
                y: self.gradientParametersY(Ypos: Double(Ynum), Xpos: Double(Xnum))),
            startRadius: CGFloat(2.0),
            endRadius: CGFloat(70.0)))
        .gesture(
            TapGesture().onEnded {_ in
                self.dataEditor(Xplace: Int(Xnum), Yplace: Int(Ynum))
            }
        )
}

关于swift - 如何在 forEach 循环中传递变量函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60353495/

相关文章:

ios - (Firebase)在计算数组中的用户时在数据库中打印错误的用户数

swift - 如何使用自定义 Swift 类声明 Objective-C 方法

ios - 如何不从 ViewDidLoad 中的 NSUserDefaults 获取 nil 值

ios - 获取嵌入到 CollectionView 中的 TableView 中的 IndexPath 项

SwiftUI:删除所有核心数据实体条目后列表不会自动更新

SwiftUI ViewModel 不更新计算变量

ios - SwiftUI 中的结构体初始化 : 'self' used before all stored properties are initialized

ios - SwiftUI 查看所有 View ,包括工作 TableView

ios - Xcode 11.0-swift 的 Core Plot iOS 编译器错误

ios - 为什么我没有在 xcode 中使用 apple 登录