我有三节课,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没有这个概念)。

10-08 18:44