gpt4 book ai didi

cocoa - 在 Swift 中实现协议(protocol)中定义的下标时出错

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

我有以下协议(protocol),带有 1 个变量和 2 个下标:

protocol Universe{

var count: Int{get}

subscript(heroAtIndex index: Int)->SuperPowered {get}
subscript(villainAtIndex index: Int)->SuperPowered {get}

}

尝试在此类中实现此协议(protocol)时:

class Marvel: Universe{

var _heroes = [
SuperPowered.heroWithFirstName("Peter", lastName: "Parker", alias: "Spiderman"),
SuperPowered.heroWithFirstName("Scott", lastName: "Summers", alias: "Cyclops"),
SuperPowered.heroWithFirstName("Ororo", lastName: "Monroe", alias: "Storm")]

var _villains = [
SuperPowered.villainWithFirstName("Victor", lastName: "Von Doom", alias: "Dr Doom"),
SuperPowered.villainWithFirstName("Erik", lastName: "Lehnsher", alias: "Magneto"),
SuperPowered.villainWithFirstName("Cain", lastName: "Marko", alias: "Juggernaut")]

// UNiverse protocol

var count : Int{
get{
return _heroes.count + _villains.count
}
}

subscript(heroAtIndex index: Int)->SuperPowered{
return _heroes[index]
}
}

我在 las 行(下标)上得到一个错误。它提示说

method 'subscript(heroAtIndex:)' has different argument names from those required by protocol 'Universe' ('subscript(villainAtIndex:)')
subscript(heroAtIndex index: Int)->SuperPowered{
^

我不知道编译器在说什么:名字是一样的,我什至复制粘贴了。

这是怎么回事?

最佳答案

参数可以是命名的或位置的。通过放置 heroAtIndex index,您可以将其设为命名参数;即你必须调用 subscript(heroAtIndex:x)

然后您会遇到这两个方法具有完全相同的名称和参数类型的问题。它变得很困惑,因为你只实现了其中一个,它提示说,当你试图找到另一个的实现时,你把参数名称弄错了。

当你同时实现它们时(正如你的协议(protocol)所说的那样),编译时错误就不再存在,所以问题和错误消息一样消失了。

关于cocoa - 在 Swift 中实现协议(protocol)中定义的下标时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26044713/

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