使用方法初始化 class 属性 的正确方法

Correct way to initialize class property with method

我在 Swift 中做一个小游戏,但我在使用 class 方法初始化 属性 时卡住了。

 class Game {
 var height: Int
 var width: Int
 var board: [[String]] = createBoard()


 init(height: Int, width: Int) {
    self.height = height
    self.width = width
 }

 func createBoard() -> [[String]]{
   var gameBoard: [[String]] = []
    //working with width and height props from above
    //filling the board and returning
   return gameBoard
  }
 }

如何根据函数 createBoard() 设置板值? (在创建板中我正在使用高度和宽度)

延迟创建 属性

好处是在第一次读取 属性 之前不会执行闭包

class Game {
    var height: Int
    var width: Int
    lazy var board: [[String]] = {
        var gameBoard: [[String]] = []
        //working with width and height props from above
        //filling the board and returning
        return gameBoard
    }()


    init(height: Int, width: Int) {
       self.height = height
       self.width = width
    }
 }

正如@vadian 告诉 lazy 的那样,这是一种很好的方法。但我想补充一点。

我认为你需要将你的 heightwidth 设为私有,以防止从外部更改它们,惰性块将被调用一次,如果你将更改为 ex。 height从10到100你的板计算不会被调用。如果您需要在初始化后更改游戏设置,我会建议您使用另一种方法。

    class Game {
        var height: Int {
            didSet {
                board = self.updateGameBoard(height: height,
                                             width: width)
            }
        }
        var width: Int {
            didSet {
                board = self.updateGameBoard(height: height,
                                             width: width)
            } 
        }
    
        lazy var board: [[String]] = {
            return updateGameBoard(height: height, width: width)
        }()
    
        init(height: Int, width: Int) {
           self.height = height
           self.width = width
        }

        private func updateGameBoard(height: Int, 
                                     width: Int) -> [[String]] {
            var gameBoard: [[String]] = []
            //working with width and height props from above
            //filling the board and returning
            return gameBoard
        }
   }

这将允许您通过更改 heightwidth

来更改从外部更新电路板的反应