在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:”思想,我该怎么办?
答案 0 :(得分:2)
这里的问题在于:为什么我不能用标准库做到这一点?
Set
需要Hashable
个项目,这些项目也必须为Equatable
。这意味着执行Set<Array<T>>
将需要检查 Any Array
是否与其他人相等。但如果T
不是Equatable
,您如何比较它们?不能(仍然?)声明条件扩展导致这个:(
我认为你最好的选择(在标准库上没有过多的扩展)也可以在Swift中使用NSSet
/ NSArray
,或者至少定义两个部分中的一个({{ 1}}和Set
)作为包装器。