美文网首页
Swift 关于泛类的一些使用方法

Swift 关于泛类的一些使用方法

作者: 南国青天 | 来源:发表于2016-06-21 11:37 被阅读117次

    刚接触泛类我一开始是很抵触了....因为洒家实在看不懂T这个是什么鬼, 玩不转看不懂.
    直到发现很多优秀的开源库都用到<T>, 虽然当时一脸萌逼的样子, 心里明白泛类是一个好东西.

    为什么我们要用泛类?

    很多时候我们构建一个函数或者一个类(结构体), 我们可以传入不同参数获取不同输出, 但是如果有一些函数输入是Int 输出 String, 有一些输入是String输出String, 内部的逻辑可以复用, 如果不用泛类那你就得写2个不同的函数或者类, 泛类能有效的防止你重复造轮子.

    func swapValue<T>(inout intput: [T], inout output: [T]) {
            let temp = intput
            intput = output
            output = temp
        }
    
            var a = ["a","b"]
            var b = ["c","d"]
            swapValue(&a, output: &b)
            
            var c = [1,2]
            var d = [3,4]
            swapValue(&c, output: &d)
    
          //a = ["c","d"], b = ["a","b"], c = [3,4], d = [1,2]
    
     func mapValue<orignal,destination>(intput: [orignal],fn:(orignal) -> destination) -> [destination] {
            var array = [destination]()
            for value in intput {
                let destinationValue = fn(value)
                array.append(destinationValue)
            }
            return array
        }
    
            let orignalArray = [1,2,3]
            let stringArray = mapValue(orignalArray) {
                String($0)
            }
            
            let multipleArray = mapValue(orignalArray) {
                $0 * 2
            }
        //stringArray: ["1", "2", "3"] 
        //multipleArray: [2, 4, 6]
    
    
    
    struct Person<Value, U> {
        var array = [Value]()
        var array1 = [U]()
    }
    
    var person = Person<String,Int>()
    person.array.append("fuck")
    person. array1.append(11)
    
    // Person<String, Int>
    // array : 1 elements
    // [0] : "fuck"
    // array1 : 1 elements
    // [0] : 11
    

    相关文章

      网友评论

          本文标题:Swift 关于泛类的一些使用方法

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