[英]Swift - struct type does not conform to protocol
我正在學習 Swift,但我有點堅持基礎知識.. 從 Apple 下載了一個示例項目,但仍然看不出這兩者之間有什么區別:
我的結構:
import Foundation
import SwiftUI
import CoreLocation
struct Store: Hashable, Codable, Identifiable {
var id: Int
var name: String
var categories: [Category]
private var logoName: String
var logo: Image {
Image(logoName)
}
private var coordinates: Coordinates
var locationCoordinate: CLLocationCoordinate2D {
CLLocationCoordinate2D(
latitude: coordinates.latitude,
longitude: coordinates.longitude)
}
struct Coordinates: Hashable, Codable {
var latitude: Double
var longitude: Double
}
}
樣本:
import Foundation
import SwiftUI
import CoreLocation
struct Landmark: Hashable, Codable, Identifiable {
var id: Int
var name: String
var park: String
var state: String
var description: String
var isFavorite: Bool
private var imageName: String
var image: Image {
Image(imageName)
}
private var coordinates: Coordinates
var locationCoordinate: CLLocationCoordinate2D {
CLLocationCoordinate2D(
latitude: coordinates.latitude,
longitude: coordinates.longitude)
}
struct Coordinates: Hashable, Codable {
var latitude: Double
var longitude: Double
}
}
第一個是失敗的:
"Type 'Store' does not conform to protocol 'Equatable'"
"Type 'Store' does not conform to protocol 'Hashable'"
第二個工作正常。
有什么區別? Xcode 中是否有設置? :)
(樣本來自: https://developer.apple.com/tutorials/swiftui/handling-user-input )
Store
有一個屬性,它是Category
的數組。 我猜Category
不符合Equatable
或Hashable
,因此 Swift 無法綜合一致性。
Landmark
包含所有符合Equatable
和Hashable
的屬性,因此它可以綜合符合Landmark
。
有兩種解決方案可以使Store
符合要求。
使Category
符合這兩種協議。 然后 Swift 可以合成Store
的一致性。
通過實現static func == (lhs: Store, rhs: Store) -> Bool
and func hash(into: inout Hasher)
顯式實現Hashable
和Equatable
for Store
的一致性
根據Category
的實現,最簡單的解決方案可能是:
extension Category: Hashable, Equatable { }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.