Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 要对CGPoint进行哈希(到:)的哈希值_Swift_Hashtable - Fatal编程技术网

Swift 要对CGPoint进行哈希(到:)的哈希值

Swift 要对CGPoint进行哈希(到:)的哈希值,swift,hashtable,Swift,Hashtable,我有一个Swift类,它使用Point设置一个锚点,并使用hashValue符合Hashable。我需要更新我的类以符合新的协议,但是我不知道如何将hashValue更改为新的协议方法 class MyClass { var center: Point var x: Double { get { return center.x } set { center.x = newValue } } var y: Double {

我有一个Swift类,它使用Point设置一个锚点,并使用hashValue符合Hashable。我需要更新我的类以符合新的协议,但是我不知道如何将hashValue更改为新的协议方法

class MyClass {

    var center: Point

    var x: Double {
       get { return center.x }
       set { center.x = newValue }
    }
    var y: Double {
       get { return center.y }
       set { center.y = newValue }
    }
}

extension MyClass: Hashable {
   var hashValue: Int {
      return x.hashValue ^ y.hashValue
   }
}
我知道我需要使用:

func hash(into hasher: inout Hasher {
   
}

我尝试过hasher.combine(),但我不知道如何将它与x.hashValue和y.hashValue一起使用,或者是否需要使用其他内容。请帮助。

阅读以下内容:即使
被声明为某个有趣的地方,代码也不会编译,像
return x.hashValue^y.hashValue
这样的代码正是引入
哈希(into:)
的原因
^
是将
x
y
散列在一起的可怕方式,因为冲突是如此可预测。每个点
(0,0),(1,1),(2,2),…
都将散列到相同的值。感谢@Alexander Monica提供的信息。那很有趣。我以前没有用Hashable做过任何事情,所以有一点背景很好。是的,代码是编译的,我只发布了相关部分。再次感谢。IDK什么是
Point
(它是
CGPoint
的别名吗?),但将其包装到类中可能是个坏主意。假设原始的
只是一个
结构
,包含to
Double
s(每个8字节),那么它的大小将为16字节。在64位系统上,通过将其封装在一个类中,您又引入了16字节的开销,加上分配、ARC内存管理和取消分配的开销。您应该改用
结构
,或者只在
方向:
扩展点:Hashable{…}