gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 15:19:31 26 4
gpt4 key购买 nike

我有三个类,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 给我一个错误 无法将“RandomTactic”类型的值转换为“Tactic”类型的预期参数。我想创建船舶游戏并测试很多不同的策略,所以我必须这样做,有什么解决方案吗?

最佳答案

尝试使用 RandomTactic() 而不是简单地使用 RandomTactic。事实上,您想注入(inject)一个扩展 Tactic 的类的实例。

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

关于swift - 将类的子类作为参数传递给其他类 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46265054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com