Hashable.hashValue устарел как требование протокола; согласовать тип CarnivalWheel с Hashable, реализовав вместо этого hash (into :)

Кажется, не удается правильно изменить хэш (в :)? все, что я пытаюсь, приносит новую ошибку

Любая помощь по этому поводу будет оценена, Swift 5

import UIKit
import TTFortuneWheel

class CarnivalWheel: FortuneWheelSliceProtocol, Codable, Hashable {
    static func == (lhs: CarnivalWheel, rhs: CarnivalWheel) -> Bool {
        return ObjectIdentifier(lhs) == ObjectIdentifier(rhs)
    }
    
    var hashValue: Int {
        return ObjectIdentifier(self).hashValue
    }
    
    enum Style: String, Codable, Hashable {
        case blue
        case purple
        case green
        case grey
        case orange
        case yellow
    }
    var style: Style = .blue
    var backgroundColor: UIColor? {
        switch style {
        case .blue: return TTUtils.uiColor(from: 0xdff9fb)
        case .purple: return TTUtils.uiColor(from: 0xa29bfe)
        case .green: return TTUtils.uiColor(from: 0x7bed9f)
        case . grey: return TTUtils.uiColor(from: 0xdfe4ea)
        case .orange: return TTUtils.uiColor(from: 0xffbe76)
        case .yellow: return TTUtils.uiColor(from: 0xf6e58d)
        }
    }
    
    var title: String
    var degree: CGFloat = 0.0
    
    init(title: String) {
        self.title = title
    }
    
    var fontColor: UIColor {
        return UIColor.black
    }
    
    var offsetFromExterior: CGFloat {
        return 10.0
    }
    
    var stroke: StrokeInfo? {
        return StrokeInfo(color: UIColor.white, width: 1.0)
    }
    
    convenience init(title: String, degree: CGFloat) {
        self.init(title: title)
        self.degree = degree
    }
}

person Jamesnjones    schedule 25.08.2020    source источник
comment
Прочтите документацию, поскольку непонятно, что такое ObjectIdentifier   -  person vadian    schedule 25.08.2020
comment
@vadian, возможно, это: developer.apple.com/documentation/swift/objectidentifier   -  person user28434'mstep    schedule 25.08.2020
comment
@Jamesnjones, вы можете просто удалить свою пользовательскую переменную hashValue, и Hashable может сгенерировать ее для вас. Все CarnivalWheel свойства выглядят как Hashable, так что это возможно.   -  person user28434'mstep    schedule 25.08.2020
comment
если я удалю свою пользовательскую переменную, то появится сообщение об ошибке, в котором говорится, что колесо карнавала не соответствует Hashable, и потому что его автоматический синтез класса Hashable не поддерживается   -  person Jamesnjones    schedule 25.08.2020
comment
@Jamesnjones, Ваш представленный код завершен? Потому что я вижу только 3 сохраненных свойства style Hashable типа Style, title Hashable типа String и degree Hashable типа CGFloat. Должна быть возможна автоматическая реализация Hashable.   -  person user28434'mstep    schedule 26.08.2020
comment
Отвечает ли это на ваш вопрос? Swift: Hashable.hashValue устарел как требование протокола;   -  person Max MacLeod    schedule 23.12.2020


Ответы (1)


func hash(into hasher: inout Hasher) {
        hasher.combine(ObjectIdentifier(self))
    }

добавлю соответствия.

person cazman    schedule 25.08.2020
comment
looks to create the same hash value as you have above - нет. Hasher даже не будет одинаковым каждый раз, когда вы запускаете приложение. - person user28434'mstep; 26.08.2020