IOSプロジェクトで次の問題(単なる警告)に直面しています。
「Hashable.hashValue」はプロトコル要件として廃止されました。代わりに 'hash(into :)'を実装して、タイプ 'ActiveType'を 'Hashable'に適合させます
ソースコード:
public enum ActiveType {
case mention
case hashtag
case url
case custom(pattern: String)
var pattern: String {
switch self {
case .mention: return RegexParser.mentionPattern
case .hashtag: return RegexParser.hashtagPattern
case .url: return RegexParser.urlPattern
case .custom(let regex): return regex
}
}
}
extension ActiveType: Hashable, Equatable {
public var hashValue: Int {
switch self {
case .mention: return -1
case .hashtag: return -2
case .url: return -3
case .custom(let regex): return regex.hashValue
}
}
}
より良い解決策はありますか? 「ハッシュ(into :)」の実装を勧める警告自体ですが、どうすればよいですか?
リファレンス: ActiveLabel
警告が言うように、今度は代わりにhash(into:)
関数を実装する必要があります。
func hash(into hasher: inout Hasher) {
switch self {
case .mention: hasher.combine(-1)
case .hashtag: hasher.combine(-2)
case .url: hasher.combine(-3)
case .custom(let regex): hasher.combine(regex) // assuming regex is a string, that already conforms to hashable
}
}
ヒント:Equatable
はenumを拡張するため、列挙型を明示的にHashable
に準拠させる必要はありません。