gpt4 book ai didi

swift - 如何声明 Dictionary 符合协议(protocol)

转载 作者:行者123 更新时间:2023-11-28 15:41:24 25 4
gpt4 key购买 nike

我已经定义了一个协议(protocol):

public protocol VariableTable {
subscript(key:String) -> Decimal? { get set }
}

这仅仅表示 VariableTable必须为 String->Decimal 提供下标运算符。

显然,Dictionary<String, Decimal>符合那个要求。我如何让编译器知道这一点?

extension Dictionary<String, Decimal> : VariableTable {}

产量:

Constrained extension must be declared on the unspecialized generic type 'Dictionary' with constraints specified by a 'where' clause

其中:

extension Dictionary : VariableTable where Key == String, Value == Decimal {}

或:

 extension Dictionary : VariableTable where Element == (String, Decimal) {}

导致错误:

Extension of type 'Dictionary' with constraints cannot have an inheritance clause

最佳答案

这在 Swift 3.0 中是不可能的。

但是如果您只关心这个 VariableTable 下标,您可以将字典包装在另一种符合协议(protocol)的类型中,例如:

public protocol VariableTableProtocol {
subscript(key:String) -> Decimal? { get set }
}

final class VariableTable: VariableTableProtocol {
fileprivate var dictionary: [String: Decimal] = [:]

subscript(key: String) -> Decimal? {
get {
return dictionary[key]
}
set {
dictionary[key] = newValue
}
}
}

关于swift - 如何声明 Dictionary<String, Decimal> 符合协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43665217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com