美文网首页
Swift---23.泛型

Swift---23.泛型

作者: 阿丶伦 | 来源:发表于2017-03-13 17:23 被阅读13次
    • 泛型:

    泛型代码让你能够根据自定义的需求,编写出适用于任意类型、灵活可重用的函数及类型。它能让你避免代码的重复,用一种清晰和抽象的方式来表达代码的意图。
    - ####泛型参数:
    Swift函数中,我们确定传入参数的时候,必须要确定参数的类型.
    如下例子,我们定义了一个方法,调换传入的两个Int类型值.当我们想要调换两个字符串的值,又得重新写一个传入类型为String的方法.
    这时,如果我们使用"泛型",将会省去很多不必要的重复代码.
    - #####写法:
    在方法名后添加<xxx>,把具体的参数类型替换成xxx,xxx泛指任意类型,决定于你传入的参数,需要注意,多个参数情况下,必须保持参数类型一致.xxx的类型由你自己决定,可以为T,U,也可以是任意你想定义的名称
    //转换两个Int值 func swapTwoInt(_ a : inout Int,_ b : inout Int) { let temp = a; a = b b = temp } var a = 3 ,b = 4 swapTwoInt(&a, &b) print(a,b) //转换两个传入String的值 func swapTwoString(_ a : inout String,_ b : inout String) { let temp = a; a = b b = temp } var c = "c" , d = "d" //转换两个任意值 swapTwoString(&c, &d) print(c,d) func swapTwoValues<A>(_ a:inout A , _ b :inout A) { let temp = a; a = b b = temp } swapTwoValues(&a, &b) swapTwoValues(&c, &d) print(a,b) print(c,d) //报错,两个参数类型必须一致 //swapTwoValues(&a, &c)
    - ####泛型类型
    - ####扩展泛型类型
    class SomeClass<SOMETYPE> { var item : [SOMETYPE] init(item:[SOMETYPE]) { self.item = item } } var string = SomeClass(item: ["a"]) var int = SomeClass(item: [1]) extension SomeClass { var topItem:SOMETYPE? { return item.isEmpty ? nil:item[item.count-1] } } int.topItem
    - ####类型约束:
    类型约束可以指定一个类型参数必须继承自指定类,或者符合一个特定的协议或协议组合。
    - ######写法:
    在定义泛型类型或泛型参数时,<A:xxx>,在自定类型名称后添加":xxx",xxx为协议或者类型
    ```
    class SomeClass{

        }
        func compareTwoValues<T:Equatable>(a:T,_ b:T) {
            if a == b {
                print("\(a)=\(b)")
            }else {
                print("\(a)!=\(b)")
            }
        }
        compareTwoValues(1, "a")
        //报错,因为someclass不符合Equatable协议
        //compareTwoValues("a", SomeClass())
        ```
    - ####类型关联:
    

    关联类型为协议中的某个类型提供了一个占位名(或者说别名),其代表的实际类型在协议被采纳时才会被指定。
    - ######写法:使用"associatedtype"关键字修饰占位名
    protocol SomeProtocol { associatedtype SomeType var getValue:SomeType{get} } class SomeClass<T>: SomeProtocol { var someValue:T init (somevalue:T) { self.someValue = somevalue } var getValue: T { return someValue } } var someclass = SomeClass(somevalue: 1) someclass.getValue

    相关文章

      网友评论

          本文标题:Swift---23.泛型

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