在SwiftUI中创建状态对象数组



在我的项目中,我有一个自定义类的2D数组,GridTile表示网格。这是类:

import Foundation
import SwiftUI
class GridTile: ObservableObject {

@Published var tileNumber = 0
var tileFrame = CGRect.zero
var isBeingHovered = false

}

我希望我的视图在tileNumber更改时更新,但在isBeingHovered更改时不更新。这就是为什么我把它作为tileNumber发布的可观测对象。

我的问题实际上是创建2D阵列并将瓷砖附着到视图。这就是我现在的做法:

struct GameView: View {

@State var gridTiles = [[GridTile]]()

let gridWidth = 9
let gridHeight = 9
var body: some View {
VStack(spacing: 0) {
drawGrid()
}
.onAppear {
// Creates the grid at the specified size
for row in 0..<gridHeight {
// Makes each row
gridTiles.append([GridTile]())
for col in 0..<gridWidth {
// Makes each cell
@StateObject var cell = GridTile()
gridTiles[row].append(cell)
}
}
}
}
}

但它给了我一个警告:Accessing StateObject's object without being installed on a View. This will create a new instance each time.如何以不同的方式解决此问题?

我本来打算建议将GridTile作为一个结构,但只使用内置的GridItem会更简单。

在SwiftUI中,建议对视图数据使用值类型,因为SwiftUI利用了值语义的依赖性跟踪和区分功能。如果您使用对象,您将失去这些功能,并且可能存在一致性错误。

最新更新