Swift: 重置实例
Swift: Reset an instance
我想知道 swift 中重置对象属性的最佳实践方法是什么。在下面的示例代码中,我正在寻找一种方法来重置对象的属性 而无需 创建新对象。
我知道最好创建一个新对象,因为它具有相同的效果,但我想知道是否有一种方法可以在不创建新对象的情况下执行此操作。另外,我知道我可以一个一个地重置每个属性,但是在具有很多属性的 class 中,这将是一种更简洁的方法。
示例代码:
var pingPong: Game = Game()
class Game {
var player1Score: Int
var player2Score: Int
init() {
self.player1Score = 0
self.player1Score = 0
}
func newGame() {
init() //Code in question
}
}
我试过从 newGame()
方法调用 class init()
,这会引发错误。我也试过调用 self.init()
,之后我收到一条错误消息,告诉我改用 type(of: self).init()
,这会引发另一个错误 Constructing an object of class type 'pingPong' with a metatype value must use a 'required' initializer
.
如何在不创建新对象的情况下完成重置对象的属性?
没有一个神奇的功能可以重置所有属性。
第一个选项是手动重置所有属性:
class Game {
var player1Score: Int = 0
var player2Score: Int = 0
init() {
}
func reset() {
player1Score = 0
player2Score = 0
}
func newGame() {
reset()
//continue other newGame functions
}
}
但是,如果您有很多属性,这可能会变得乏味。相反,您可以将您的状态封装到一个值类型 (struct
) 中,并在您准备好玩新游戏时创建一个新实例。这可能看起来像这样:
struct GameState {
var player1Score = 0
var player2Score = 0
}
class Game {
var gameState : GameState
init() {
self.gameState = GameState()
}
func newGame() {
self.gameState = GameState()
//continue other newGame functions
}
}
这样,您的 Game
实例保持不变,但它拥有的状态已重置。
我想知道 swift 中重置对象属性的最佳实践方法是什么。在下面的示例代码中,我正在寻找一种方法来重置对象的属性 而无需 创建新对象。
我知道最好创建一个新对象,因为它具有相同的效果,但我想知道是否有一种方法可以在不创建新对象的情况下执行此操作。另外,我知道我可以一个一个地重置每个属性,但是在具有很多属性的 class 中,这将是一种更简洁的方法。
示例代码:
var pingPong: Game = Game()
class Game {
var player1Score: Int
var player2Score: Int
init() {
self.player1Score = 0
self.player1Score = 0
}
func newGame() {
init() //Code in question
}
}
我试过从 newGame()
方法调用 class init()
,这会引发错误。我也试过调用 self.init()
,之后我收到一条错误消息,告诉我改用 type(of: self).init()
,这会引发另一个错误 Constructing an object of class type 'pingPong' with a metatype value must use a 'required' initializer
.
如何在不创建新对象的情况下完成重置对象的属性?
没有一个神奇的功能可以重置所有属性。
第一个选项是手动重置所有属性:
class Game {
var player1Score: Int = 0
var player2Score: Int = 0
init() {
}
func reset() {
player1Score = 0
player2Score = 0
}
func newGame() {
reset()
//continue other newGame functions
}
}
但是,如果您有很多属性,这可能会变得乏味。相反,您可以将您的状态封装到一个值类型 (struct
) 中,并在您准备好玩新游戏时创建一个新实例。这可能看起来像这样:
struct GameState {
var player1Score = 0
var player2Score = 0
}
class Game {
var gameState : GameState
init() {
self.gameState = GameState()
}
func newGame() {
self.gameState = GameState()
//continue other newGame functions
}
}
这样,您的 Game
实例保持不变,但它拥有的状态已重置。