簡體   English   中英

Swift - 結構類型不符合協議

[英]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不符合EquatableHashable ,因此 Swift 無法綜合一致性。

Landmark包含所有符合EquatableHashable的屬性,因此它可以綜合符合Landmark

有兩種解決方案可以使Store符合要求。

  1. 使Category符合這兩種協議。 然后 Swift 可以合成Store的一致性。

  2. 通過實現static func == (lhs: Store, rhs: Store) -> Bool and func hash(into: inout Hasher)顯式實現HashableEquatable for Store的一致性

根據Category的實現,最簡單的解決方案可能是:

extension Category: Hashable, Equatable { }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM