【发布时间】:2020-11-13 11:29:46
【问题描述】:
下面的代码显示了警告:
❯ swiftc demo.swift [13:06:57]
Swift.RawRepresentable:2:27: warning: 'Hashable.hashValue' is deprecated as a protocol requirement; conform type 'PlaybackSpeed' to 'Hashable' by implementing 'hash(into:)' instead
@inlinable public var hashValue: Int { get }
枚举 PlaybackSpeed 应具有默认实现中的函数 resetSettings() 和 hash(into:),因此不应生成此警告。
是我的理解错误还是编译器的错误?
protocol Settingsable {
func resetSettings()
}
protocol SettingsSelectable: Hashable, Settingsable {
var display: String { get }
}
extension SettingsSelectable {
func hash(into hasher: inout Hasher) {
hasher.combine(display)
}
}
extension SettingsSelectable {
func resetSettings() {
print("These have been reset")
}
}
enum PlaybackSpeed: Int, SettingsSelectable {
case half
case standard
case onePointFive
case double
var display: String {
switch self {
case .half:
return "0.5x"
case .standard:
return "1.0x"
case .onePointFive:
return "1.5x"
case .double:
return "2.0x"
}
}
}
【问题讨论】:
-
带有警告的代码在哪里?
-
@Jessy 对我来说,这并没有在操场上产生警告,但是当我将它添加到项目中时(MacOS,Xcode 12.2,如果这是相关的)。
标签: swift hashable swift-compiler