• 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/
  • 相关阅读:
    安卓基础值之Intent
    输入值/表单提交参数过滤有效防止sql注入的方法
    一致性hash
    linux授权某个用户对某个目录有读写的权限
    mysql分区功能详细介绍,以及实例
    SVN分支与主干
    solr查询
    mysql-proxy做客户端连接转发【外网访问内网mysql】
    liunx 下安装 php_screw 扩展 以及报错处理
    邮件发送
  • 原文地址:https://www.cnblogs.com/liuw-flexi/p/12625602.html
Copyright © 2020-2023  润新知