swift与pattern

import Foundation



func swapTwoInts(inout a: Int, inout b: Int) {

    let temporaryA = a

    a = b

    b = temporaryA

}


func swapTwoStrings(inout a: String, inout b: String) {

    let temporaryA = a

    a = b

    b = temporaryA

}


func swapTwoDoubles(inout a: Double, inout b: Double) {

    let temporaryA = a

    a = b

    b = temporaryA

}



//泛型代码可以让你写出根据自我需求定义适用于任何类型的,灵活且可重用的函数和类型。它可以让你避免重复代码,用一种清晰和抽象的方式来表达代码的意图


//T为占位类型名字,可支持多个类型参数,命名在尖括号中,用逗号分开

func swapTwoValues<T>(inout a: T, inout b: T) {

    let temporaryA = a

    a = b

    b = temporaryA

}


var someInt = 3

var anotherInt = 107

swapTwoValues(&someInt, &anotherInt)


var someString = "hello"

var anotherString = "world"

swapTwoValues(&someString, &anotherString)




//MARK: - 泛型类型与泛型参数

struct IntStack {

    var items = [Int]()

    mutating func push(item: Int) {

        items.append(item)

    }

    mutating func pop() -> Int {

        return items.removeLast()

    }

}


struct Stack<T> {

    var items = [T]()

    mutating func push(item: T) {

        items.append(item)

    }

    mutating func pop() -> T {

        return items.removeLast()

    }

}


var stackOfStrings = Stack<String>()

stackOfStrings.push("uno")

stackOfStrings.push("dos")

stackOfStrings.push("tres")

stackOfStrings.push("cuatro")

// 现在栈已经有4string

let fromTheTop = stackOfStrings.pop()




//MARK: - 类型约束

//类型约束指定了一个必须继承自指定类的类型参数,或者遵循一个特定的协议或协议构成

/*

//第一个类型参数T,有一个需要T必须是SomeClass子类的类型约束;第二个类型参数U,有一个需要U必须遵循SomeProtocol协议的类型约束

func someFunction<T: SomeClass, U: SomeProtocol>(someT: T, someU: U) {

    // function body goes here

}

*/


func findStringIndex(array: [String], valueToFind: String) -> Int? {

    for (index, value) in enumerate(array) {

        if value == valueToFind {

            return index

        }

    }

    return nil

}

let strings = ["cat", "dog", "llama", "parakeet", "terrapin"]

if let foundIndex = findStringIndex(strings, "llama") {

    println("The index of llama is \(foundIndex)")

}

// 输出 "The index of llama is 2"



//Swift 标准库中定义了一个Equatable协议,该协议要求任何遵循的类型实现等式符(==)和不等符(!=)对任何两个该类型进行比较。所有的 Swift 标准类型自动支持Equatable协议。

func findIndex<T: Equatable>(array: [T], valueToFind: T) -> Int? {

    for (index, value) in enumerate(array) {

        if value == valueToFind {   //不是所有的 Swift 中的类型都可以用等式符(==)进行比较

            return index

        }

    }

    return nil

}


let doubleIndex = findI

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值