我有三个班,A班:
class Game {
init(tactic:Tactic) {
//Set tactic
tacticReference = tactic
setShipsMapAndShotsMap()
}
}
B组:
class Tactic {
var name:String?
init() {
name = "Default"
}
func shotPosition(shots: inout [[Int]],shipMap:[[Int]],ships:[Ship]) -> [Int] {
return []
}
}
B类的子类:
class RandomTactic:Tactic {
override init() {
super.init()
name = "RandomTactic"
}
override func shotPosition( shots: inout [[Int]], shipMap: [[Int]], ships: [Ship]) -> [Int] {
//Position
var vertical:Int?
var horizontal:Int?
//Random position
repeat{
horizontal = Int(arc4random_uniform(10))
vertical = Int(arc4random_uniform(10))
}while shots[vertical!][horizontal!] != 0
//Fire at the position
shots[vertical!][horizontal!] += 1
return [vertical!,horizontal!]
}
}
我想创建{C}实例的Game
对象作为初始参数,如let game = Game(tactic: RandomTactic)
,但Xcode给我一个错误Cannot convert value of type 'RandomTactic' to expected argument of type 'Tactic'
。我想创建船只游戏并测试很多不同的战术,所以我必须这样做,有什么解决方案吗?
答案 0 :(得分:1)
尝试使用RandomTactic()
,而不仅仅是RandomTactic
。实际上,您希望注入一个扩展Tactic
的类的实例。
无论如何,我会创建Tactic
作为协议而不是类,因为它充当抽象类(Swift没有的概念)。