Swift 泛型函数 类型约束(十三)
发布时间:2020-12-14 07:04:48 所属栏目:百科 来源:网络整理
导读:非泛型函数 /// 交换两个整形的值 func swapTwoNumbersInt(inout a : Int,inout _ b:Int) { let temp = a a = b b = temp } /// 交换两个字符串的值 func swapTwoString(inout string1: String ,inout _ string2: String ) { let temp = string1 string1 = s
非泛型函数/// 交换两个整形的值
func swapTwoNumbersInt(inout a: Int,inout _ b:Int)
{
let temp = a
a = b
b = temp
}
/// 交换两个字符串的值
func swapTwoString(inout string1: String,inout _ string2: String)
{
let temp = string1
string1 = string2
string2 = temp
}
如果想实现不确定类型值的交换上面的方法是不是显得太过死板,所以泛型的出现很好的解决这个 泛型泛型函数–泛型函数可以适用于任何类型 /// 实现不确定类型值交换
func swapTwoValues<T>(inout a: T,inout _ b: T)
{
let temp = a
a = b
b = temp
}
类型约束
for example 类型约束/// 非泛型
func findStringIndex(array: [String],_ valueToFind: String) -> Int? {
for (index,value) in array.enumerate() {
if value == valueToFind {
return index
}
}
return nil
}
/// 泛型
/// T 遵循 Equatable
func findIndex<T: Equatable>(array: [T],_ valueToFind: T) -> Int? {
for (index,value) in array.enumerate() {
/// 不是所有的 Swift 类型都可以用等式符(==)进行比较
/// Swift 标准库中定义了一个 Equatable 协议,该协议要求任何遵循该协议的类型必须实现等式符(==)及不等符(!=),从而能对该类型的任意两个值进行比较。所有的 Swift 标准类型自动支持 Equatable 协议。
if value == valueToFind {
return index
}
}
return nil
}
下面是我在viewDidLoad中的调用var a = 10
var b = 20
// self.swapTwoNumbersInt(&a,&b)
print("b: (b)")
var string1 = "Big"
var string2 = "Small"
// self.swapTwoString(&string1,&string2)
print("string2: (string2)")
///
self.swapTwoValues(&a,&b)
print("b: (b)")
///
self.swapTwoValues(&string1,&string2)
print("string2: (string2)")
///
let strings = ["button","label","view","model","Controller"]
if let foundIndex = findStringIndex(strings,"label") {
print("(foundIndex)")
}
///
if let foundIndex = findIndex(strings,"view") {
print("view: (foundIndex)")
}
///
let ints = [1,2,3,4,55,6]
if let foundIndex = findIndex(ints,55) {
print("55: (foundIndex)")
}
类型格式转化 1. labelTitle.text = NSString(format: "%d",indexPath.row) as String
String <-> int
2. a = Int(scrollView.contentOffset.x)
int <-> cgfloat
3. dic["title"] as? String
NSString <-> String
总结: 使用泛型写出的代码是不是功能很强大? 学起来吧. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |