Swift-泛型
Swift-泛型参考:
Swift 的 泛型函数 如下的函数 func pairsFromDictionary<KeyType,ValueType>(dictionary: [KeyType: ValueType]) -> [(KeyType,ValueType)] { return Array(dictionary) } 使用情况如下: let pairs = pairsFromDictionary(["minimum": 199,"maximum": 299]) let morePairs = pairsFromDictionary([1: "Swift",2: "Generics",3: "Rule"]) 使用泛型来定义栈和队列 栈 struct Stack<Element> { var items = [Element]() mutating func push(item: Element) { items.append(item) } mutating func pop() -> Element { return items.removeLast() } } 方法被标记为 队列 struct Queue<Element> { private var elements = [Element]() mutating func enqueue(newElement: Element){ elements.append(newElement) } mutating func dequeue() -> Element? { guard !elements.isEmpty else { return nil } return elements.removeAtIndex(0) } func peek() -> Element? { return elements.first } } 类型约束 例如,Swift 的 如下,在数组中查找是否有需要查找的值: func findIndex<T>(array: [T],_ valueToFind: T) -> Int? { for (index,value) in array.enumerate() { if value == valueToFind { return index } } return nil } 但是,这个函数无法通过编译,原因是不是所有的 Swift 类型都可以用等式符( Swift 标准库中定义了一个 所以,修改后的函数是: func findIndex<T: Equatable>(array: [T],value) in array.enumerate() { if value == valueToFind { return index } } return nil } 也可使用 func mid<T where T: Comparable>(array: [T]) -> T { return array.sort()[(array.count - 1) / 2] }
等同于: func mid<T: Comparable>(array: [T]) -> T { return array.sort()[(array.count - 1) / 2] } 继承泛型类 class Box<T> { } 有如下的两种继承方式: class Gift<T>: Box<T> { } class StringBox: Box<String> { } Enums With Multiple Generic Associated Values 如下的泛型enum有两个关联的值:一个用来表示实际的结果,一个用来表示可能的错误。 enum Result<ValueType,ErrorType> { case Success(ValueType) case Failure(ErrorType) } 使用情况如下: func divideOrError(x: Int,y: Int) -> Result<Int,String> { guard y != 0 else { return Result.Failure("Division by zero is undefined") } return Result.Success(x / y) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |