Swift 泛型

作者: 追逐_chase | 来源:发表于2017-11-24 14:20 被阅读2次
    Swift.png
    泛型
    • 泛型代码让你能够根据自定义的需求,编写出适用于任意类型、灵活可重用的函数及类型。
    • 泛型可以避免代码的重复,用一种清晰和抽象的方式来表达代码的意图。
    • 不具体的一个类型

    //泛型解决的问题

    func exchange(num1: inout Int,num2: inout Int) {
        
        let tmp = num1;
        
        num1 = num2;
        
        num2 = tmp;
        
        
    }
    var a = 10;
    var b = 20;
    exchange(num1: &a, num2: &b);
    
    //在交换值的过程中 我们使用的Int型,如果是Double或者String的类型,那么我们在写参数为Double/string的函数,所以泛型在这个时候起到很大的用途了
    
    
    • 定义一个泛型的函数
    //<>表示 T的泛型的名称
    func exchange<T>(num1: inout T,num2: inout T) {
      
    //注意:一旦T的类型确定以后,所有的T 都是该类型
    // T 不可以是 多个类型的 在这里,因为运算是类型统一的
        let tmp = num1;
        
        num1 = num2;
        
        num2 = tmp;
        
        
    }
    var a = 10;
    var b = 20;
    exchange(num1: &a, num2: &b);
    
    
    exchange(num1: &a, num2: &b);
    
    var c = "BBBBB";
    
    var d = "cccccc";
    exchange(num1: &c, num2: &d);
    c
    d
    
    //结果是 :"cccccc"    "BBBBB"  交换成功
    
    • 协议中的泛型
      • 用关键字 associatedtype
    protocol Work {
        associatedtype T
        func run() -> T ;
        func eat() -> T ;
        
    }
    
    class Person:Work  {
        
        func run() -> Person {
            
            print("跑步")
            return self;
        }
        
        func eat() -> Person {
            
            print("吃饭");
            return self;
        }
        
        
    }
    
    • where子句约束
    // 函数有一个泛型T,参数是:T where子句后面,说明T:这个类型是 Person类,在传入参数时应该是 Person实例
    func test<T>(a:T)where T:Person {
        
    }
    

    相关文章

      网友评论

        本文标题:Swift 泛型

        本文链接:https://www.haomeiwen.com/subject/gudxbxtx.html