尽管有 init,为什么我会收到 "Variable 'grid' used before being initialized" 错误?

Why am I getting "Variable 'grid' used before being initialized" error despite having an init?

我很难理解为什么我在以下 Xcode Swift 游乐场上遇到编译器错误 ("Variable 'grid' used before being initialized")。

[提前致歉,我是Swift菜鸟。感谢您的帮助!]

我在 Xcode 10.3 的 iOS 游乐场中创建了以下内容。

我正在尝试创建一个单元格的二维网格(10 x 10),每个单元格都包含一些特定的属性(例如,值、providedByUser 等)。 我为每个单元格的属性提供了初始值。 我还有一个 init() 用于创建网格本身。希望 init() 能为我创建我想要的 10 x 10 网格。

但是,当我在声明后要求打印我的网格时,我总是收到错误消息。

import UIKit

struct Cell
{
    var value: Int = 0
    var providedByUser: Bool = false
    var options: [Int] = [0]
    var guess: Int = 0
}

struct MatrixGrid
{
    var grid: [[Cell]]
    init() {
        grid = Array(repeating: Array(repeating: Cell(value: 0, providedByUser: false, options: [0], guess: 0), count: 10), count: 10)
    }
}

var myGrid: MatrixGrid
print(myGrid)

Playground 在打印行上写着 "Variable 'myGrid' used before being initialized"。

控制台提供以下内容:

错误:Grid.playground:20:7:错误:变量 'myGrid' 在初始化之前使用 打印(我的网格) ^

Sudoku Grid.playground:19:5: 注意:这里定义了变量 var myGrid: 矩阵网格 ^

您声明了一个 MatrixGrid 类型的变量,但您从未对其进行初始化。它没有价值,因为你没有设置一个。当然,它需要有一个值,你才能使用它的值。

您正在声明变量的类型及其名称,但未为其提供值var myGrid: MatrixGrid。由于 myGrid 没有初始化,编译器告诉您在使用它之前需要为 属性 提供一个值。 var myGrid: MatrixGrid = MatrixGrid() 应该可以解决您的问题