swiftでは、2つの構造体が等しいかどうかをどのように判断するか。
Swiftでは、2つの構造体が等しいかどうかをEquatableプロトコルに従うことで判断することができます。
まず、構造体にEquatableプロトコルを実装し、等価演算子(==)の実装を定義する必要があります。以下はサンプルです:
struct Person: Equatable {
var name: String
var age: Int
static func == (lhs: Person, rhs: Person) -> Bool {
return lhs.name == rhs.name && lhs.age == rhs.age
}
}
上の例では、Person構造体にEquatableプロトコルを実装し、==演算子の実装で2つの構造体のnameとageのプロパティが等しいかどうかを判断しました。
その次、==演算子を使用して2つのPerson構造体が等しいかどうかを判断することができます。例えば:
let person1 = Person(name: "John", age: 25)
let person2 = Person(name: "John", age: 25)
if person1 == person2 {
print("两个结构体相等")
} else {
print("两个结构体不相等")
}
上記の例では、person1とperson2の名前と年齢のプロパティが等しいため、「2つの構造体が等しい」と判断されます。
Equatableプロトコルに従わず、等価演算子を実装しない場合、Swiftはデフォルトの等価判断ルールを使用し、つまり、2つの構造体が同じプロパティ値を持っているかどうかを判断します。ただし、特定の場合には、カスタムの等価判断ルールが必要な場合があります。その場合は、Equatableプロトコルと等価演算子を手動で実装する必要があります。