在Xcode 10中,Swift编译器足够智能,可以做到以下几点:
以以下代码为例:
我该如何在Xcode 9中使可选类型符合
- 将包装
Hashable
值的可选项视为Hashable
。 - Xcode > =9.4也会将包含所有
Hashable
属性的struct
视为Hashable
。
Hashable
。以以下代码为例:
struct Foo: Hashable {
var string1: String?
var string2: String?
}
这段代码在Xcode 10下编译通过,并且使用Foo对象的hashValue也能按预期工作,即使构建语言是Swift 3!
然而,在Xcode 9.4中,除非将属性设为非可选类型,否则Foo结构体不会自动成为可哈希类型。
在Xcode 9.4/Swift 4.1中,以下代码可以编译并正常工作:
struct Foo: Hashable {
var string1: String
var string2: String
}
我该如何在Xcode 9中使可选类型符合
Hashable
协议呢?我可以自己为我的结构体实现Hashable
一致性,但对于多部分结构创建良好的哈希实际上很棘手,我不想担心这个问题。我也想不出一个简单的方法来让可选类型符合Hashable
。(再次说明,这只是在Xcode < Xcode 10中存在的问题。我的雇主尚未迁移到Xcode 10,因此我需要适用于Xcode 9.4的解决方案。)