gpt4 book ai didi

Swift:帮助我了解创建和使用从基类派生的专业类的 Swift 方式

转载 作者:行者123 更新时间:2023-11-30 11:47:37 25 4
gpt4 key购买 nike

来自 Ruby,我很难理解静态类型。

我有一个 Board 类,我希望使用 GameType 对其进行初始化。我想我应该从一个基类开始:

class GameType {
private(set) var targetNumber: Double = 10.0
private(set) var divisions: Double = 10
}

class TenGame: GameType {
override var targetNumber: Double { return 10.0 }
}

class HundredGame: GameType {
override var targetNumber: Double { return 100.0 }
}

但是,当然,子类具有不同的类型。这意味着,这不起作用:

let board = Board(withGameType: TenGame)

"Cannot convert value of type 'TenGame.Type' to expected argument type 'GameType'."

所以,生闷气之后,我想起了协议(protocol)。这很接近:

protocol GameType {
var targetNumber: Double { get }
var divisions: Double { get }
}

extension GameType{
var divisions: Double { return 10.0 }
var targetNumber: Double { return 10.0 }
}

class TenGame: GameType {}

但我仍然必须强制我的游戏类型:

let board = Board(withGameType: TenGame() as! GameType)

这可不太好!

我感觉我在这里遗漏了一些关键概念。这种模式在 Swift 中可能吗?我如何以 Swift 方式做到这一点?

最佳答案

问题是我没有注意错误消息:

"Cannot convert value of type 'TenGame.Type' to expected argument type 'GameType'."

在这里,我只传递类类型:

let board = Board(withGameType: TenGame)

我的 Board 类需要一个实例,因此我应该使用以下方式初始化它:

let board = Board(withGameType: TenGame())

关于Swift:帮助我了解创建和使用从基类派生的专业类的 Swift 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48644418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com