- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我已经定义了一个枚举来表示一个“站”的选择;站由唯一的正整数定义,因此我创建了以下枚举以允许负值表示特殊选择:
enum StationSelector : Printable {
case Nearest
case LastShown
case List
case Specific(Int)
func toInt() -> Int {
switch self {
case .Nearest:
return -1
case .LastShown:
return -2
case .List:
return -3
case .Specific(let stationNum):
return stationNum
}
}
static func fromInt(value:Int) -> StationSelector? {
if value > 0 {
return StationSelector.Specific(value)
}
switch value {
case -1:
return StationSelector.Nearest
case -2:
return StationSelector.LastShown
case -3:
return StationSelector.List
default:
return nil
}
}
var description: String {
get {
switch self {
case .Nearest:
return "Nearest Station"
case .LastShown:
return "Last Displayed Station"
case .List:
return "Station List"
case .Specific(let stationNumber):
return "Station #\(stationNumber)"
}
}
}
}
我想将这些值用作字典中的键。声明字典会产生预期的错误,即 StationSelector 不符合 Hashable。使用简单的散列函数很容易符合 Hashable:
var hashValue: Int {
get {
return self.toInt()
}
}
但是,Hashable
需要符合 Equatable
,而且我似乎无法在我的枚举上定义等于运算符来满足编译器的要求。
func == (lhs: StationSelector, rhs: StationSelector) -> Bool {
return lhs.toInt() == rhs.toInt()
}
编译器提示这是在一行中的两个声明,并且想在 func
之后放置一个 ;
,这也没有意义。
有什么想法吗?
最佳答案
来自 Swift 书:
Enumeration member values without associated values (as described inEnumerations) are also hashable by default.
但是,您的 Enumeration 确实有一个具有关联值的成员值,因此您必须手动添加 Hashable
一致性。
您的实现的问题是 Swift 中的运算符声明必须在全局范围内。
只是移动:
func == (lhs: StationSelector, rhs: StationSelector) -> Bool {
return lhs.toInt() == rhs.toInt()
}
在 enum
定义之外,它会起作用。
检查 the docs有关更多信息。
关于dictionary - 如何使用 Swift 枚举作为字典键? (符合等式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24562357/
我正在尝试建立一个模型,该模型将根据是否存在某些组件(在我的情况下为流体端口)具有略微不同的方程。 如下代码将不起作用: parameter Boolean use_component=false;
首先采用,kludge 解决方案,sentinel 方法(您的程序必须不允许输入 sentinel 值): select coalesce(a, -2147483648) = coalesce(b,
我有一个类型族,它确定某物是否位于类型级列表的开头。 type family AtHead x xs where AtHead x (x ': xs) = True AtHead y
我试图找出为什么在下面的方法中,数组“8”中的最后一个值会满足“(8 & 7) == 0”的 where 子句。 public class Test { public static voi
我是 C 语言的初学者。我正在使用在线示例代码并尝试分析以下内容, int x = 0, y = 16; *x_ptr = &x 这是我要确保我在语法上理解的第二行。我刚刚遇到指针的概念,并试图从概念
我想知道geom_density()到底在做什么,所以我证明了图的合理性,以及是否有任何方法可以提取为绘制的每条曲线生成的函数或点。 谢谢 最佳答案 键入get("compute_group", gg
我试图用 Haskell 实现一个 Braun 树,定义如下: {-# LANGUAGE GADTs #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE PolyK
==有什么区别和 === ? 松散到底是怎么做的==对比工作? 严格怎么做===对比工作? 什么是一些有用的例子? 最佳答案 ==之间的区别和 === 松散的区别==相等运算符和严格 ===相同的运算
==有什么区别和 === ? 松散到底是怎么做的==对比工作? 严格怎么做===对比工作? 什么是一些有用的例子? 最佳答案 ==之间的区别和 === 松散的区别==相等运算符和严格 ===相同的运算
在理解下面的代码中发生了什么时遇到问题。数组 c 和 d 的行为是我所期望的。但是 a 和 b 是怎么回事? (我也用普通的标量变量尝试过这个,在任何一种情况下都没有发生令人惊讶的事情。) 输出被复制
我正在尝试使用 Java Swing 为数学方程式创建一个 GUI 5((θ/β) - cos(2πθ/β)) . 最初我开始使用一个简单的余弦函数并创建了 GUI,它工作正常。这是我的余弦函数程序:
我正在尝试将这条曲线作为我目前正在开发的一款小游戏的升级系统的一部分。方程如下 f(x) = -e^-((-log(7)/100)*(100-x))+7 在python中可以定义为 f=lambda
我是一名优秀的程序员,十分优秀!