我一直在尝试让该函数返回Bool值,但我不明白为什么我会收到错误消息“在期望返回'Bool'的函数中缺少返回值。”并尝试了其他方法,但我似乎找不到解决方案。任何帮助将不胜感激!
func trueSquare(a:[Int], b:[Int]) -> Bool {
for i in b[0]...b.endIndex {
if b[i] == a[i]*a[i] {
return true
}
else {
return false
}
}
}
编辑:我已经将循环更改为for i in 0...(b.count - 1)
,但是即使我使用a和b调用具有相同元素数量的函数,也仍然遇到相同的错误。
答案 0 :(得分:2)
我怀疑对于根本不执行循环的情况,编译器需要返回值。
现在,ClosedRange
永远不会为空,因此b[0]...b.endIndex
永远不会为空(如果结果为空或无效范围,则代码将崩溃),但编译器不会足够聪明知道这一点。
PS:您确定b[0]...b.endIndex
实际上是您要循环的序列。这将创建一个范围,从b
的第一个 到b
的 endIndex 。对我来说这没有任何意义。
答案 1 :(得分:2)
如果您的数组没有元素怎么办?然后对于每个循环永远不会运行,然后您的方法将不会返回任何结果,这显然是错误的。因此,即使在循环之外,您也需要返回值。
但是,你的逻辑不好。您要返回布尔值,具体取决于b
中的 first 元素是否等于a*a
。
因此,逻辑应该类似于:如果每个元素都满足条件,则返回true
,否则,返回false
。为此,在Swift 4.2+中,您可以使用方法allSatisfy
func trueSquare(a:[Int], b:[Int]) -> Bool {
guard a.count == b.count else { return false } // if arrays have different number of elements, return false
return a.enumerated().allSatisfy {$0.element * $0.element == b[$0.offset]}
}
答案 2 :(得分:1)
您的函数无法处理b为空数组的情况。 在这种情况下,您需要定义返回值是什么,因为当b为空数组时,将跳过循环。
第二,您的逻辑也不完整,因为如果条件适合i == 0,您将立即返回true,而无需检查其余项。
第三,您可能要确保a和b的长度相同。
这就是您的函数的外观:
<View style={styles.AddressRow}>
{item.Online !== '' && <TouchableOpacity onPress={() => Linking.openURL(item.Online)}>
<Text style={styles.underLineText}>Online</Text>
</TouchableOpacity>}