OC和Swift中的hash的小不同

2017-04-12  本文已影响0人  万物皆有破绽

以前测试过OC的NSSet(字典也一样),发现和java中的HashMap规律一致。直接先上结果

java中的

我的测试基本步骤是,自定义对象作为 字典的key,hash返回相同, == 或者 isEqual 返回true,就判定为同一个对象,为了保证在容器对象中的正确,一般要求重写equals是要重写hashCode。比如一个人类对象,判断是否同一个人,就根据DNA属性重写isEqual)和 hash

- (BOOL)isEqual:(id)other
{
    //修改 返回值 看不同结果
    return false;
}

- (NSUInteger)hash
{
    //修改 返回值 看不同结果
    return 1;
}

    Test *t1 = [Test new];
    Test *t2 = [Test new];
    NSMutableSet *set = [[NSMutableSet alloc] initWithObjects:t1, t2, nil];

在Swift中,测试时用的swift3.1 不管是在swift中调用 OC的类还是swift的类。swift中 == 都和 isEqual 中的返回值一致(可能还有其他的影响因素我没测到吧, 同样也是看不到源代码的具体细节,,,估计是重写了 == 函数,默认调用的就是 isEqual),上面set,字典中判断是否相等 应该就是这样了吧,

/// == 反正和isEqal 相同,没必要再判断
e.hash == hash && e.key == key
swift测试
上一篇 下一篇

猜你喜欢

热点阅读