Значение типа протокола «Any» не может соответствовать «Equatable»; только типы struct / enum / class могут соответствовать протоколам

Значение имеет тип «ЛЮБОЙ», так как это может быть Int или String. Таким образом, не удалось реализовать протокол Equatable. Ниже приведен фрагмент кода.

struct BusinessDetail:Equatable {
    static func == (lhs: BusinessDetail, rhs: BusinessDetail) -> Bool {
        lhs.cellType == rhs.cellType && lhs.value == rhs.value
    }

    let cellType: BusinessDetailCellType
    var value: Any?
}

enum BusinessDetailCellType:Int {
case x
case y
var textVlaue:String {
   Switch self {
     case x:
        return "x"
     case y:
        return "y"
   }
}
}

person pankaj nigam    schedule 02.05.2020    source источник


Ответы (2)


Используйте Generics вместо Any ...

struct BusinessDetail<T>  {

  let cellType: BusinessDetailCellType
  var value: T?
}

extension BusinessDetail: Equatable {
  static func ==<T> (lhs: BusinessDetail<T>, rhs: BusinessDetail<T>) -> Bool {
    lhs.cellType == rhs.cellType
  }
  static func == <T1:Equatable>(lhs: BusinessDetail<T1>, rhs: BusinessDetail<T1>) -> Bool {
    lhs.cellType == rhs.cellType && lhs.value == rhs.value
  }

}

enum BusinessDetailCellType:Int {
  case x
  case y

  var textVlaue:String {
    switch self {
    case .x:
      return "x"
    case .y:
      return "y"
    }

  }
}
person Jawad Ali    schedule 02.05.2020
comment
прокомментируйте причину отказа ... чтобы я мог улучшить, если что-то упустил - person Jawad Ali; 02.05.2020
comment
Зачем нужны две функции. static func == ‹T› (слева: BusinessDetail ‹T›, справа: BusinessDetail ‹T›) - ›Bool {lhs.cellType == rhs.cellType} static func ==‹ T1: Equatable ›(слева: BusinessDetail‹ T1 ›, Rhs: BusinessDetail ‹T1›) -› Bool {lhs.cellType == rhs.cellType && lhs.value == rhs.value} - person pankaj nigam; 03.05.2020
comment
это требование к структуре, которая является Generic + equitable .... Поскольку этот T также должен быть равноправным, вам нужно написать две функции ... надеюсь, что это поможет ... - person Jawad Ali; 03.05.2020

У меня была аналогичная проблема, решением которой было использование [AnyHashable] вместо типа [Any]!

person Top-Master    schedule 22.05.2021