Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了斯威夫特错误:二元运算符“\u0026\u0026”不能适用于两个“布尔”操作数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

显然必须有一种方式来进行AND或OR多重布尔。 我得到这个错误,试图写一个这样的功能… func isLOCATIOnWithinView(LOCATIOn: CGPoint, view: UIView) { // return (LOCATIOn.x >= CGRectGetMinX(view.framE)) && (LOCATIOn.x <= CGRectGetMaxX(
显然必须有一种方式来进行AND或OR多重布尔。

我得到这个错误,试图写一个这样的功能

func isLOCATIOnWithinView(LOCATIOn: CGPoint,view: UIView) {
    //        return (LOCATIOn.x >= CGRectGetMinX(view.framE)) && (LOCATIOn.x <= CGRectGetMaxX(view.framE)) && (LOCATIOn.y >= CGRectGetMinY(view.framE)) && (LOCATIOn.y <= CGRectGetMaxY(view.framE))
    var a = true
    var b = false
    return a && b // Error: Binary operator '&&' cAnnot be applied to two 'Bool' operands
}

这是什么解决方案?

错误是误导的:核心在于你缺少返回类型… – > Bool在你的函数签名中,因此尝试为空的元组类型()分配一个布尔值(没有明确的返回类型,函数期望返回为空的元组类型())。

您可以重现这种误导性错误,以便将布尔值分配给非布尔类型,其中布尔值是以与无效赋值相同的表达式执行逻辑AND / OR表达式的结果:

var a : () = (true && falsE)    /* same error */
var b : Int = (true && falsE)   /* same error */
var c : () = (true || falsE)    /* same error (for binary op. '||') */

而如果您将AND / OR操作包含在闭包中或简单地将它们分配给中间布尔变量,则会松开混淆的错误消息,并显示实际错误

var d : () = { _ -> Bool in return (true && falsE) }()
    /* CAnnot convert call result type 'Bool' to expected type '()' */
var e = true && false
var f : () = e
    /* CAnnot convert value of type 'Bool' to expected type '()' */

现在为什么你给这个误导的错误。逻辑运算符&&和||通过对其右侧表达式(rhs)进行条件评估来实现,以便只有在左手侧(lhs)评估为&& / ||的真/假的情况下,可以懒惰地评估rhs。操作符。

/* e.g. the AND '&&' logical binary infix operator */
func &&(lhs: BooleanType,@autoclosure rhs: () -> BooleanTypE) -> Bool {
    return lhs.boolValue ? rhs().boolValue : false
}

由于lhs本身对于后续的分配无效,可能的延迟闭包rhs会引发由Bool类型到()的“外部”无效分配引起的错误,但抛出的错误(“二进制op”和“应用…“)不是&&&呼叫。

要验证,我们可以实现我们自己的非懒惰AND运算符,如&&&

infix operator &&& {
    associativity right
    precedence 120
}
func &&&(lhs: BooleanType,rhs: BooleanTypE) -> Bool {
    return lhs.boolValue ? rhs.boolValue : false
}
var g : () = false &&& true
/* CAnnot convert value of type 'Bool' to expected type '()' */

大佬总结

以上是大佬教程为你收集整理的斯威夫特错误:二元运算符“\u0026\u0026”不能适用于两个“布尔”操作数全部内容,希望文章能够帮你解决斯威夫特错误:二元运算符“\u0026\u0026”不能适用于两个“布尔”操作数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。