PlayCard继承自Card

给定两个具有相同名称的函数:

 func match(othercards : [PlayingCard]) ->  Int {
     return 2
 }

 func match(othercards : [Card]) ->  Int {
     return 2
 }

它抛出错误说:具有选择器'match:'的重写方法具有不兼容的类型'([[PlayingCard])-> Int'

为什么???它的两个函数具有相同的名称,但具有两种不同的参数,为什么仍然要求覆盖?如果我这样做,那甚至被称为错误

最佳答案

由于PlaingCard继承自Card,因此您不能以这种方式覆盖该方法。

考虑一下,如果您尝试与PlayingCard实例进行匹配将发生什么情况。它会调用两种方法中的哪一种?这将是模棱两可的,因此是不允许的。

在这种情况下,一种解决方案是更改采用更特定类型的方法的名称。例如

 func matchPlayingCard(othercards : [PlayingCard]) ->  Int {
     return 2
 }

08-03 16:51