使用方法初始化 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 的那样,这是一种很好的方法。但我想补充一点。
我认为你需要将你的 height
和 width
设为私有,以防止从外部更改它们,惰性块将被调用一次,如果你将更改为 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
}
}
这将允许您通过更改 height
或 width
来更改从外部更新电路板的反应
我在 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 的那样,这是一种很好的方法。但我想补充一点。
我认为你需要将你的 height
和 width
设为私有,以防止从外部更改它们,惰性块将被调用一次,如果你将更改为 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
}
}
这将允许您通过更改 height
或 width