自动实现可清除类中的唯一ID

Ica*_*aro 2 hashtable iequatable swift

我创建了一个我想成为Hashable和Equatable的新类,所以我可以轻松地遍历它,类示例如下:

class MyClass: Hashable {
    var uid: Int
    var myName: String
    var myAge:Int
    var hashValue: Int {
        return self.uid
    }
    init(uid: Int, name: String, age: Int) {
        self.uid = uid
        self.myName = name
        self.myAge = age
    }
}

func ==(lhs: MyClass, rhs: MyClass) -> Bool {
    return lhs.uid == rhs.uid
}
Run Code Online (Sandbox Code Playgroud)

问题是,现在我必须在创建类时传递一个uid,如下所示:

let user1 = MyUser(uid: 1, name: "Me", age: 36)
Run Code Online (Sandbox Code Playgroud)

我想让uid静态并为我创建的每个对象生成一个新的,如下所示:

let user2 = User(name: "The other guy", age: 23)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,user2的uid将等于2,它只是一个set属性,它不需要get,因为它应该对使用该类的人完全透明.

但是,每当我尝试将uid更改为a static var或a时,class var我都无法使其符合Hashable protocol

提前致谢

Ben*_*n G 9

不确定这是你想要的,但是如果你创建一个"uid"属性的唯一原因是模仿一种引用相等而不是值相等(你可能是,因为你使用的是类而不是struct),也许还想看看:

var hashValue: Int { 
        return ObjectIdentifier(self).hashValue
    }
Run Code Online (Sandbox Code Playgroud)