zoukankan      html  css  js  c++  java
  • SwiftUI 中 Hashable的作用?

    参考 https://www.jianshu.com/p/06c993c5ad89

    只有遵循了Hashable 协议 才能被添加到 Set 中 或者用作 Dictionary 的 key 值。

    比较结构体和类的不同,类必须要实现Hashable的协议方法

     struct Person:Hashable {
                var name: String
                var age: Int
            }
    
            let ming = Person(name: "ming", age: 10)
            let hong = Person(name: "hong", age: 11)
    
            var set: Set<Person> = []
            set.insert(ming)
            set.insert(hong)
            print(set)
    
            var dic:[Person: String] = [:]
            dic[ming] = ming.name
            dic[hong] = hong.name
            print(dic)
            
            
            let stu1 = Student(name: "东邪", age: 50)
            let stu2 = Student(name: "吸毒", age: 51)
    
            var set: Set<Student> = []
            set.insert(stu1)
            set.insert(stu2)
            print(set)
    
            var dict: [Student: String] = [:]
            dict[stu1] = stu1.name
            dict[stu2] = stu2.name
            print(dict)
    
            let stu3 = Student(name: "吸毒", age: 51)
            set.insert(stu3)
            dict[stu3] = stu3.name
            print("插入stu3 , name age同stu2 set结果= (set)")
            print("插入stu3 , name age同stu2 dict结果= (dict)")
    
            let stu4 = Student(name: "吸毒", age: 61)
            set.insert(stu4)
            dict[stu4] = stu4.name
            print("插入stu4 , name 同stu2 set结果= (set)")
            print("插入stu4 , name 同stu2 dict结果= (dict)")
            
            
            //假如我们对Person进行修改 , 年龄相同就当做同一个人?
    
    class Student: Hashable {
        static func == (lhs: Student, rhs: Student) -> Bool {
            return lhs.name == rhs.name && lhs.age == rhs.age
        }
        
        func hash(into hasher: inout Hasher) {
            hasher.combine(name)
            hasher.combine(age)
        }
        
        init(name: String,age: Int) {
            self.name = name
            self.age = age
        }
        
        var name: String
        var age: Int
    }
    
    此文仅为鄙人学习笔记之用,朋友你来了,如有不明白或者建议又或者想给我指点一二,请私信我。liuw_flexi@163.com/QQ群:582039935. 我的gitHub: (学习代码都在gitHub) https://github.com/nwgdegitHub/
  • 相关阅读:
    java9新特性-9-语法改进:try语句
    10.04 FZSZ模拟Day1 总结
    10.03模拟总结
    HNOI2012 永无乡
    ZJOI2007 报表统计
    HNOI2004 宠物收养场
    HNOI2002 营业额统计
    Splay 区间反转
    Splay基本操作
    HEOI2016 树
  • 原文地址:https://www.cnblogs.com/liuw-flexi/p/12625602.html
Copyright © 2011-2022 走看看