在Swift中创建数组

我试图创建一个数组的集合,使元素独特.
我认为使用Set初始化程序来完成这项工作将是一种优雅的方法.所以我创建了一个数组并尝试使用该数组初始化我的新集.
但是编译器在抱怨.我尝试使用Integer值,它就像一个魅力.但是对于我自己的课程,它不起作用.我还认为Equitable Protocol是正确的方法……但正如你所看到的,它并没有解决我的问题.

考虑以下游乐场:

import UIKit

internal struct Object: Equatable {
    var a: Int
}

internal func == (lhs:Object,rhs: Object) -> Bool {
    return lhs.a == rhs.a
}

let array = [Object(a:1),Object(a:1),Object(a:2)]

let set = Set(array) // ERROR

编译器抱怨

can not invoke initializer Set<_> with argument of type [Object]

我需要实施哪个协议才能使工作正常进行?

如果你’命令 – 单击’在Xcode中设置’,它会转到Set类型的定义.你去了:
/// A collection of unique `Element` instances with no defined ordering.
public struct Set<Element : Hashable> : Hashable,CollectionType ...

如Rob所述,元素需要确认为Hashable(这又需要Equatable).

调整代码:

import Foundation

internal struct Object: Hashable {
    var a: Int
    var hashValue: Int { return a.hash }
}

internal func == (lhs:Object,Object(a:2)]

let set = Set(array) // SUCCESS

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...