11

コンパイル中に Equatable でエラーが発生しました。リストにfindまたはcontainsメソッドを追加して、値を確認したかったのです。 以下の私のコード

class Generic: NSObject, Equatable, NSCoding //Am Having an error -  Redundant conformance of 'Generic' to protocol 'Equatable'

{

  var genericCode: String?
  var genericName : String?
  var genericType : String?
  var genericImageUrl : String?
  var genericPhone: String?
  var orgName : String?

override init()
{

    self.genericCode = String("")
    self.genericName = String("")
    self.genericType = String("")
    self.genericImageUrl = String("")
    self.genericPhone = String("")
    self.orgName = String("")

}

//Parameterzed Constructor for the Generic
init(genericCode: String , genericName: String , genericPhone: String, genericType: String, genericImageUrl : String)
{
    self.genericCode = genericCode
    self.genericName = genericName
    self.genericType = genericType
    self.genericImageUrl = genericImageUrl
    self.genericPhone = genericPhone

}

required init(coder aDecoder: NSCoder) {
    genericCode = aDecoder.decodeObjectForKey("genericCode") as? String
    genericName = aDecoder.decodeObjectForKey("genericName") as? String
    genericType = aDecoder.decodeObjectForKey("genericType") as? String
    genericPhone = aDecoder.decodeObjectForKey("genericPhone") as? String
}

func encodeWithCoder(aCoder: NSCoder) {
    aCoder.encodeObject(genericCode, forKey: "genericCode")
    aCoder.encodeObject(genericName, forKey: "genericName")
    aCoder.encodeObject(genericType, forKey: "genericType")
    aCoder.encodeObject(genericPhone, forKey: "genericPhone")
}

}

func ==(lhs: Generic, rhs: Generic) -> Bool
{
  return lhs.genericCode == rhs.genericCode
}

エラーが発生しました。NSCoding と NSobject を使用しているためですか?

4

2 に答える 2

27

継承するクラスNSObjectは、すでに に準拠していEquatableます。したがって、宣言Object: Equatableは冗長です。

ただし、適合は適切に実装されていることを意味するものではありません (NSObjectポインタが同じかどうかをチェックするだけです)。Equatableを適切に実装したい場合はNSObject、プロトコル適合性ステートメント ( ) を除外するだけで: Equatable、比較メソッドを実装します。

static func ==(lhs: Object, rhs: Object) -> Bool {
   return lhs.text == rhs.text
}
于 2018-02-21T20:16:05.170 に答える
16

docsによると、以下にNSObject準拠していEquatableます:


CVarArgType
CustomDebugStringConvertible
CustomStringConvertible
Equatable
Hashable
NSObjectProtocolに準拠

...したがって、あなたのエラーが言うように、Equatableへの準拠は冗長です...

于 2016-05-23T11:55:44.780 に答える