无法将 Int 类型的值转换为预期的参数类型 Bool
Posted
技术标签:
【中文标题】无法将 Int 类型的值转换为预期的参数类型 Bool【英文标题】:Cannot convert value of type Int to expected argument type Bool 【发布时间】:2016-12-20 03:08:03 【问题描述】:我正在尝试使用三个条件过滤 Firebase 查询结果:
let posts = snapshot.childSnapshots.map
Post(snapshot: $0)
.reversed().filter
post?.isGlobal == dataFilter && (self.dependents.contains($0.postedBy) || self.currentUser?.uid == $0.postedBy)
必须满足第一个条件(post.isglobal == datafilter)
。然后,我想在满足其余两个条件之一时进一步过滤帖子。
以上代码返回错误:Binary operator == cannot be applied to operands of type NSNumber? and Int
任何帮助将不胜感激。 谢谢!
编辑:dataFilter
变量被定义为 viewcontroller 类中的全局变量:
var dataFilter = 0
【问题讨论】:
比较是用==
,而不是=
如果我把它改成==
我得到错误Binary operator == cannot be applied to operands of type NSNumber? and Int
尝试 (post?.isGlobal.intValue ?? 0) ==
或在访问其 isGlobal intValue 属性之前打开您的可选帖子
谢谢利奥!那行得通。那做了什么?是否将其转换为 Int,然后如果找不到该值则将其设置为 0?
【参考方案1】:
您可以打开您的可选帖子并访问它的 isGlobal intValue 属性,NSNumber 有一个 intValue 属性,它返回一个 Int,您可以将其与您的 dataFilter (Int) 值进行比较。或使用'??' nil 合并以解开您的可选绑定,同时为它提供一个默认值以防出现 nil。
所以如果你打开你的帖子对象:
post.isGlobal.intValue == dataFilter
或者使用可选的 biding 和 nil 合并操作符:
(post?.isGlobal.intValue ?? 0) == dataFilter
【讨论】:
以上是关于无法将 Int 类型的值转换为预期的参数类型 Bool的主要内容,如果未能解决你的问题,请参考以下文章
无法将类型“[Surah]”的值转换为预期的参数类型“Range<Int>”
如何在此 for 循环中修复'无法将'String'类型的值转换为预期的参数类型'Int'
在 swift assert(0) 中无法将 Int 类型的值转换为预期的参数类型 Bool
无法将“Binding<Int>”类型的值转换为预期的参数类型“Binding<_>”
无法将类型“Range<Int32>”的值转换为预期的参数类型“Range<_>”
无法将“Int”类型的值转换为预期的参数类型“(inout UnsafeMutableBufferPointer<_>, inout Int) throws -> Void”