【问题标题】:Xcode does not offers to add protocol stubsXcode 不提供添加协议存根
【发布时间】:2020-07-18 10:39:07
【问题描述】:

我正在尝试使我的 struct Card 符合 Hashable 协议(用于字典),但由于某种原因,Xcode 没有对我大喊大叫,并出现红色错误,例如“Type 'Card' 不符合协议 'Hashable'。我不明白为什么。我想让 Xcode 添加协议存根。

import Foundation

struct Card : Hashable {
    
    var isFaceUp = false
    var isMatched = false
    var identifier : Int
    
    private static var identifierFactory = 0
    
    private static func getUniqueIdentifier() -> Int {
        Card.identifierFactory += 1
        return Card.identifierFactory
    }
    
    init() {
        identifier = Card.getUniqueIdentifier()
    }
}

【问题讨论】:

  • 你从哪里得到这个错误?分享相关代码。您结构中的所有属性也符合Hashable,您共享的代码不会引发错误,
  • @omerfarukozturk 我只是想实现 Hashable 协议,将我的卡放在字典中,如 [Card : String]
  • 您可以将Card 定义为字典的键,如您所写的[Card: String]。它应该无需任何修改即可工作。你从哪里得到错误:Type 'Card' does not conform to protocol 'Hashable

标签: ios swift xcode


【解决方案1】:

它没有显示任何错误,表明您需要添加协议存根以符合它,因为Hashable 协议是在结构Card 上自动合成的。因此,添加Hashable 协议一致性不需要任何额外的代码。

如果出于某种原因您想要覆盖默认实现,您可以通过以下操作来实现。

struct Card: Hashable {
    //...
    func hash(into hasher: inout Hasher) {
        hasher.combine(identifier) // combine any hashable you like
    }
}

【讨论】:

  • 还要注意 Equatable 是 Hashable 的一部分。
猜你喜欢
  • 1970-01-01
  • 2022-01-23
  • 2019-05-03
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 2016-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多