如何在 swift 个对象上按字段检查相等性
How to check equality by field on swift objects
如何检查两个 swift 对象是否具有所有字段的保存值?
我想尽可能不费力地完成这项工作。我不想为每个对象实现 equatable 以手动实现相等性检查。
注意:我不是在检查 ID 是否相等,而是在检查所有字段是否具有相同的值。
struct Post {
let id: Int
let owner: User
let comment: String
}
struct User {
let id: Int
let name: String
}
let user = User(id: 1, name: "Steve")
let post = Post(id: 1, owner: user, comment: "I invented iPhone")
let user2 = User(id: 1, name: "Steve")
let post2 = Post(id: 1, owner: user2, comment: "I invented iPhone")
if post == post2 {
print("equal") // Should reach here
} else {
print("not equal")
}
使Post
和User
符合Equatable
协议。
struct Post: Equatable {
let id: Int
let owner: User
let comment: String
}
struct User: Equatable {
let id: Int
let name: String
}
如果您想要自定义一致性,例如您不想检查参数 comment
是否相等,则使用:
struct Post: Equatable {
static func == (lhs: Post, rhs: Post) -> Bool { lhs.id == rhs.id } // could add "&& lhs.owner.id == rhs.owner.id" if that's what you're going for
}
然后:
let user = User(id: 1, name: "Steve")
let post = Post(id: 1, owner: user, comment: "I invented iPhone")
let user2 = User(id: 1, name: "Steve")
let post2 = Post(id: 1, owner: user2, comment: "I invented iPhone")
if post == post2 {
print("equal") // reaches here
} else {
print("not equal")
}
如何检查两个 swift 对象是否具有所有字段的保存值?
我想尽可能不费力地完成这项工作。我不想为每个对象实现 equatable 以手动实现相等性检查。
注意:我不是在检查 ID 是否相等,而是在检查所有字段是否具有相同的值。
struct Post {
let id: Int
let owner: User
let comment: String
}
struct User {
let id: Int
let name: String
}
let user = User(id: 1, name: "Steve")
let post = Post(id: 1, owner: user, comment: "I invented iPhone")
let user2 = User(id: 1, name: "Steve")
let post2 = Post(id: 1, owner: user2, comment: "I invented iPhone")
if post == post2 {
print("equal") // Should reach here
} else {
print("not equal")
}
使Post
和User
符合Equatable
协议。
struct Post: Equatable {
let id: Int
let owner: User
let comment: String
}
struct User: Equatable {
let id: Int
let name: String
}
如果您想要自定义一致性,例如您不想检查参数 comment
是否相等,则使用:
struct Post: Equatable {
static func == (lhs: Post, rhs: Post) -> Bool { lhs.id == rhs.id } // could add "&& lhs.owner.id == rhs.owner.id" if that's what you're going for
}
然后:
let user = User(id: 1, name: "Steve")
let post = Post(id: 1, owner: user, comment: "I invented iPhone")
let user2 = User(id: 1, name: "Steve")
let post2 = Post(id: 1, owner: user2, comment: "I invented iPhone")
if post == post2 {
print("equal") // reaches here
} else {
print("not equal")
}