将类的子类作为参数传递给其他类Swift

时间:2017-09-17 14:16:36

标签: swift class

我有三个班,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'。我想创建船只游戏并测试很多不同的战术,所以我必须这样做,有什么解决方案吗?

1 个答案:

答案 0 :(得分:1)

尝试使用RandomTactic(),而不仅仅是RandomTactic。实际上,您希望注入一个扩展Tactic的类的实例。

无论如何,我会创建Tactic作为协议而不是类,因为它充当抽象类(Swift没有的概念)。