二元运算符“==”不能应用于“字符串?”类型的操作数和 Swift 3 中的“布尔”

Posted

技术标签:

【中文标题】二元运算符“==”不能应用于“字符串?”类型的操作数和 Swift 3 中的“布尔”【英文标题】:Binary operator '==' cannot be applied to operands of type 'String?' and 'Bool' in Swift 3 【发布时间】:2017-05-08 10:23:36 【问题描述】:
var is_searching: String? = nil

public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell        

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath as IndexPath) as! ProductCell

    if  is_searching == true
    
        cell.lblBrndname?.text=(searched_array[(indexPath as NSIndexPath).row] as AnyObject).value(forKey: "brand_name") as? String
        cell.Pdtimg?.image  = UIImage(named: icon_Array[indexPath.row])

    
    else
    
        cell.lblBrndname?.text=(Specarray[(indexPath as NSIndexPath).row] as AnyObject).value(forKey: "brand_name") as? String
        cell.Pdtimg?.image = UIImage(named: self.icon_Array[indexPath.row])

    
    return cell


【问题讨论】:

问题是什么? 你应该如何比较String 是否是true?您只能将String 与另一个String 进行比较。 如何将字符串与布尔值进行比较? 【参考方案1】:

改变isSearching的类型

var is_searching: Bool = false

【讨论】:

【参考方案2】:

NSString 有一个可以使用的 boolValue 属性:

if let is_searching = is_searching as? NSString,
    is_searching.boolValue == true 
  print("String is true")
 else 
  print("String is not true")

但其他海报的想法更好。如果您可以重写代码,那么 is_searching 首先是一个布尔值,这将是更好的方法。

【讨论】:

以上是关于二元运算符“==”不能应用于“字符串?”类型的操作数和 Swift 3 中的“布尔”的主要内容,如果未能解决你的问题,请参考以下文章

二元运算符“==”不能应用于“布尔”和“字符串?”类型的操作数对于 2020 年的 Swift [重复]

二元运算符 += 不能应用于类型的操作数 [关闭]

二元运算符'+'不能应用于'String'和'() -> String'类型的操作数

二元运算符 % 不能应用于 UInt32 和 int 类型的操作数

二元运算符“===”不能应用于“任何?”类型的操作数和“UIBarButtonItem!”

解析 / Swift 问题与 tableviewcell“二元运算符'=='不能应用于单元格和 nil 类型的操作数”