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

Значение типа «ЛЮБОЙ», так как оно может быть 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"
   }
}
}

1 Ответ

1 голос
/ 02 мая 2020

Используйте 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"
    }

  }
}
...