//***********************************
//
// 类型约束
// 指必须继承指定的类或者遵循特定的协议
// 语法:
// funcsomeFunc<T: SomeClass, U: SomeProtocol>(someT: T, someU: U){}
// 表示函数有两个参数someT和someU,类型分别是T和U,其中T是SomeClass子类,U遵循SomeProtocol
//
//***********************************
//先看非泛型的函数:
func findStringIndex(array: [String], valueToFind: String)-> Int? {
for (index, value) inenumerate(array) {
if value == valueToFind {
return index
}
}
return nil
}
let strings = ["aa","bb","cc","dd","ae"]
if letfoundIndex = findStringIndex(strings, "aa"){
println("found!")
}
//转换为泛型后,类型T需要遵循Equatable协议(该协议要求所有遵循的类型都实现等式==和不等式!=)
func findIndex<T: Equatable>(array: [T], valueToFind: T)-> Int? {
for (index, value) inenumerate(array) {
if value == valueToFind {
return index
}
}
return nil
}
let doubleIndex = findIndex([1.23,2.11,12.44,1.00], 1.0) //{Some 3}
let stringIndex = findIndex(["aa","bb","cc"], "dd") //nil