将集合与内部的数组进行比较

时间:2015-05-10 10:13:11

标签: ios objective-c swift cocoa-touch foundation

在Objective-C中,您可以轻松初始化包含<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="com.gwts.lingua.ContactsWindow"> <item android:id="@+id/menuSearch" android:title="Search" android:icon="@drawable/find" app:showAsAction="ifRoom|collapseActionView" android:actionViewClass="android.widget.SearchView" /> <item android:id="@+id/action_settings" android:title="@string/action_settings" android:orderInCategory="100" app:showAsAction="always" /> </menu> 个对象的NSSet个对象作为元素。由于 isEqual:方法,您可以轻松地比较这些NSArray个对象。

现在,在更强类型的Swift中,我们不能再这样做了。以下声明将收到“Type [Int]不符合协议Hashable”错误。

NSSet

我现在正在尝试比较包含一堆Int数的两组数组的相等性,我想利用Swift中Set和Array的“isEqual:”思想,我该怎么办?

1 个答案:

答案 0 :(得分:2)

这里的问题在于:为什么我不能用标准库做到这一点? Set需要Hashable个项目,这些项目也必须为Equatable。这意味着执行Set<Array<T>>将需要检查 Any Array是否与其他人相等。但如果T不是Equatable,您如何比较它们?不能(仍然?)声明条件扩展导致这个:(

我认为你最好的选择(在标准库上没有过多的扩展)也可以在Swift中使用NSSet / NSArray,或者至少定义两个部分中的一个({{ 1}}和Set)作为包装器。