在void函数|Swift中获取非void返回值时出错



我不明白为什么在执行此函数时会出现以下错误:

错误:void函数中出现意外的非void返回值return[index,dic[value]!]

func findIndexes(_ nums: [Int], _ target: Int) -> [Int] {
var dic = [Int:Int]()
var answer: [Int] = []
nums.enumerated().forEach { index, value in

//the goal is to get the index of the value matching the difference
//check if current value == anything in dictionary

//MARK: Add the Index and Difference to Dictionary
let difference = (target - value)
if (dic.keys.contains(value) && !dic.values.contains(index)) {
return [index, dic[value]!]
}
dic[difference] = index
}
return []
}
print(findIndexes([0,11,15,2,7], 9))

我不清楚你想做什么,但这是正在做的编译版本:

func findIndexes(_ nums: [Int], _ target: Int) -> [Int] {
var dic = [Int:Int]()
var answer: [Int] = []
for (index, value) in nums.enumerated() {
let difference = (target - value)
if (dic.keys.contains(value) && !dic.values.contains(index)) {
return [index, dic[value]!]
}
dic[difference] = index
}
return []
}

为什么有区别?CCD_ 1是一个循环。你可以从周围的函数中返回,从中脱离,等等。forEach隐式地循环,但它不是循环;它需要一个闭包,除非它是一个产生返回值的闭包,否则你不能从中返回,而这个闭包没有;正如你从文档中看到的,它的类型是(Self.Element) throws -> Void——而Void的意思是";没有返回值";。

如果你坚持使用forEach,你可以用一点额外的技巧来做你想做的事情:

func findIndexes(_ nums: [Int], _ target: Int) -> [Int] {
var dic = [Int:Int]()
var answer: [Int] = []
nums.enumerated().forEach { index, value in
let difference = (target - value)
if (dic.keys.contains(value) && !dic.values.contains(index)) {
answer = [index, dic[value]!]
return
}
dic[difference] = index
}
return answer
}

我认为这正是你想要做的,但我不确定;它似乎不必要地晦涩难懂。在我个人看来,编程的方法是说出你的意思(SWYM(。

相关内容

  • 没有找到相关文章

最新更新