我有三节课,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 instance作为init参数创建
Game
对象,但Xcode给了我一个错误let game = Game(tactic: RandomTactic)
。我想创建船舶游戏,测试很多不同的战术,所以我必须这样做,有什么解决办法吗? 最佳答案
尝试使用RandomTactic()
而不仅仅是RandomTactic
。实际上,您希望注入扩展Tactic
的类的实例。
无论如何,我将创建Tactic
作为协议而不是类,因为它充当抽象类(Swift没有这个概念)。