gpt4 book ai didi

Swift,我可以用更具体的派生参数类型重写一个方法吗

转载 作者:搜寻专家 更新时间:2023-10-30 23:15:31 24 4
gpt4 key购买 nike

PlayingCard 继承自 Card

给定两个同名函数:

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

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

它抛出一个错误说:覆盖方法与选择器“匹配:”具有不兼容的类型“([PlayingCard])-> Int”

为什么???它的两个函数名称相同但参数类型不同,为什么它仍然要求覆盖??如果我这样做,那么即使那样也被称为错误

最佳答案

你能做到吗?

class Card {
func match(othercards : [Card]) -> Int {
return 2 // I changed the return value just to test it
}
}

class PlayingCard : Card {
func match(othercards : [PlayingCard]) -> Int {
return 1
}
}

是的!

特别是如果 Card 不扩展 NSObject 就可以。

class Card {
func match(othercards : [Card]) -> Int {
return 2 // I changed the return value just to test it
}
}

另一方面,如果 Card 扩展 NSObject

class Card : NSObject {
func match(othercards : [Card]) -> Int {
return 2 // I changed the return value just to test it
}
}

然后你得到错误!

看起来重载只适用于“纯”Swift 类。

关于Swift,我可以用更具体的派生参数类型重写一个方法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31629386/

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