我正在尝试创建一个字谜测试器,我非常确定我的代码应该有效,但我收到错误'参数标签'( _:)'不匹配任何可用的重载'我已经查看了有关同一错误的其他帖子,但我仍然不确定这意味着什么或如何修复它。
var anagram1 : String!
var anagram2 : String!
var failure : Bool = false
var counter : Int = 0
print("Please enter first word: ")
anagram1 = readLine()
print("Please enter Second word: ")
anagram2 = readLine()
if anagram1.count == anagram2.count {
for i in anagram1.characters{
if (!failure){
failure = true
for y in anagram2.characters {
counter += 1
if i == y {
failure = false
anagram2.remove(at: String.Index(counter)) // error here
}
}
}
else {
print("these words are not anagrams")
break;
}
}
if (!failure) {
print("these words ARE anagrams")
}
}
else{
print ("these words aren't even the same length you fucking nonce")
}
答案 0 :(得分:1)
回答您的第一个问题:错误消息参数标签'(_:)'不匹配任何可用的重载表示您提供的函数参数名称或类型与Swift不知道的任何内容相匹配。
编译器也试图告诉你要查看的参数。 '(_:)' 表示您正在使用未标记的参数调用函数。 (这意味着没有任何参数名称的值。一个看似这样的函数的常见示例是print("something")
。在Swift文档中,这看起来像print(_:)
。
最后,重载是调用具有不同信息的函数的方法。再次使用print
函数作为示例,您可以多种方式调用它。一些最常见的重载是:
// print something, followed by a newline character
print("something")
// print something, but stay on the same line
// (end with an empty string instead of the default newline character)
print("something", terminator: "")
记录在案,可能看起来像print(_:)
和print(_:, terminator:)
注意:这些是细分的解释。实际的Swift文档显示了func print(_: Any..., separator: String, terminator: String)
,它涵盖了许多不同的重载!
查看发生错误的行,您会看到一个函数调用和一个初始化器(实际上是一个函数)。记录了您输入参数的方式,功能如下:remove(at:)
和String.Index(_:)
。
String.Index(_:)
会匹配错误消息的参数,以便您的错误在哪里。 String.Index
初始化程序没有带有未命名参数的重载。
要修复此错误,您需要找到为remove(at:)
函数创建String.Index参数的正确方法。一种方法可能是尝试这样的事情:
for y in anagram2.characters.enumerated() {
// `y` now represents a `tuple`: (offset: Int, element: Character)
// so, you don't need `counter` anymore; use `offset` instead
if i == y.element { //`i` is a Character, so it can compare to `element`
...
let yIndex: String.Index = anagram2.index(anagram2.startIndex, offsetBy: y.offset)
anagram2.remove(at: yIndex)
...
}
}
但是,您的代码还有其他问题会导致更多错误。
首先,你要循环一个字符串(anagram2
)并尝试同时更改它 - 这不是一件好事。
祝你好运解决问题!
答案 1 :(得分:0)
感谢Leo的帮助,但我找到了一种方法:)
if anagram1.count == anagram2.count {
for i in anagram1.characters{
if (!failure){
counter = -1
failure = true
for y in anagram2.characters {
counter += 1
if i == y {
failure = false
if counter < anagram2.count {
anagram2.remove(at: (anagram2.index(anagram2.startIndex, offsetBy: counter)))
break;
}
}
}
}