Swift:帮助我理解Swift创建和使用从基类派生的专家类的方法

By simon at 2018-02-07 • 0人收藏 • 26人看过

来自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 }
}
但是,当然,子类是一个d不同的类型。意思是,这不是 工作:
let board = Board(withGameType: TenGame)

“不能将类型'TenGame.Type'的值转换为预期的参数类型'游戏类型'。” 所以,生闷气后,我记得协议。这是关闭的:

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'我如何以迅捷的方式做到这一点?

1 个回复 | 最后更新于 2018-02-07
2018-02-07   #1

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

“不能将'TenGame.Type'类型的值转换为期望的a参数类型 '游戏类型'。” 在这里,我只传递类的类型:

let board = Board(withGameType: TenGame)
我的Board类需要一个实例,所以我应该初始化它 有:
let board = Board(withGameType: TenGame())

登录后方可回帖

Loading...