首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体和Equatable的模式是什么?

实体和Equatable的模式是什么?
EN

Stack Overflow用户
提问于 2014-09-20 22:48:52
回答 1查看 442关注 0票数 0

假设我有这个基类:

代码语言:javascript
复制
class Entity: Equatable {

  init() {
  }

  var localId: Int32?
  var id: Int32?
}

func == (lhs: Entity, rhs: Entity) -> Bool {
  return object_getClassName(lhs) == object_getClassName(rhs) &&
    lhs.localId != nil &&
    rhs.localId != nil &&
    lhs.localId == rhs.localId
}

以及一些实体实现,大致如下:

代码语言:javascript
复制
class Message: Entity {

  init(senderId: Int32, body: String, sentDateTime: NSDate) {
    self.senderId = senderId
    self.body = body
    self.sentDateTime = sentDateTime
    super.init()
  }

  var senderId: Int32
  var body: String
  var sentDateTime: NSDate
}

我是否对Equatable实现采取了正确的方法?我比较类名的原因是,localId的唯一性仅限于每种实体类型。我应该为每个实体类实现Equatable吗?在Swift中对这类事情有既定的模式吗?

EN

回答 1

Stack Overflow用户

发布于 2014-09-22 09:54:30

第一个大问题是localIdid是否真的必须是可选的。如果这就是Entity所做的全部工作,那么作为一个协议而不是一个超类,它似乎要自然得多。也不清楚为什么senderId等是var而不是let。但这些是与主要问题不同的问题。

到相等性检查。

我不相信你需要所有的!= nil检查。这应该没问题(至少在我的测试中是这样):

代码语言:javascript
复制
func == (lhs: Entity, rhs: Entity) -> Bool {
  return object_getClassName(lhs) == object_getClassName(rhs) &&
    lhs.localId == rhs.localId
}

但我看不出这里的基本想法有什么问题。

(您可能认为可以使用lhs.dynamictype == rhs.dynamicType,但令人惊讶的是(对我而言)它目前还不能编译。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25949975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档