0

我使用 xCode 6.3 的转换器将我的项目转换为 swift 1.2,之后我仍然有很多错误,但我手动修复了它们。

现在,当我编译时,我得到:
<unknown>:0: error: '[Set<T>]' is not convertible to 'Hashable'

我使用 Set 的唯一地方是:

var productID:Set<NSObject> = [subscriptionId]
var productsRequest:SKProductsRequest =    SKProductsRequest(productIdentifiers: productID )

我曾尝试清理项目并尝试删除 DerivedData 文件夹,但这并没有帮助。

我已经搜索过,但我找不到有同样问题的人。
有谁知道如何解决这个问题?

4

1 回答 1

0

这不会是派生数据的问题。看起来你以前有一个NSArray(可能是NSSet),现在你有一个ArraySet大概你正在尝试做一些事情,比如使用该值来键入字典类型。在 6.3 中,以前返回的几个 API 调用NSSomething现在返回原生 Swift 类型。

Swift 数组不可散列(因为它们可能包含不可散列的东西)。NSArrays 是(虽然并不总是有用的方式,取决于它们包含的内容,所以要小心)。

请记住,通过类型推断,您明确使用SetArray不会是您可能拥有的唯一位置。如果您调用一个返回集合数组的函数,并且像这样分配该值: let thing = funcThatReturnsArrayOfSets()那么[Set<whatever>]即使没有在代码中明确编写该类型,您也将拥有一个。

要解决此问题,您需要找到出现错误的行,查看所涉及的类型,然后追溯到声明这些变量的位置。按住 Option 键单击所有事物以查看它们的类型。

于 2015-04-16T12:10:21.620 回答