29、swift开发iOS——扩展

前端之家收集整理的这篇文章主要介绍了29、swift开发iOS——扩展前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Swift 扩展@H_403_4@

扩展就是向一个已有的类、结构体或枚举类型添加功能。@H_403_4@

扩展可以对一个类型添加新的功能,但是不能重写已有的功能。@H_403_4@

Swift 中的扩展可以:@H_403_4@

添加计算型属性和计算型静态属性@H_403_4@

定义实例方法和类型方法@H_403_4@

提供新的构造器@H_403_4@

定义下标@H_403_4@

定义和使用新的嵌套类型@H_403_4@

使一个已有类型符合某个协议@H_403_4@

语法@H_403_4@

扩展声明使用关键字 extension:@H_403_4@

extension SomeType {@H_403_4@

// 加到SomeType的新功能写到这里@H_403_4@

}@H_403_4@

一个扩展可以扩展一个已有类型,使其能够适配一个或多个协议,语法格式如下:@H_403_4@

extension SomeType: SomeProtocol,AnotherProctocol {@H_403_4@

// 协议实现写到这里@H_403_4@

}@H_403_4@

计算型属性@H_403_4@

扩展可以向已有类型添加计算型实例属性和计算型类型属性。@H_403_4@

实例@H_403_4@

下面的例子向 Int 类型添加了 5 个计算型实例属性并扩展其功能:@H_403_4@

extension Int {@H_403_4@

var add: Int {return self + 100 }@H_403_4@

var sub: Int { return self - 10 }@H_403_4@

var mul: Int { return self * 10 }@H_403_4@

var div: Int { return self / 5 }@H_403_4@

}@H_403_4@

@H_403_4@

let addition = 3.add@H_403_4@

print("加法运算后的值:\(addition)")@H_403_4@

@H_403_4@

let subtraction = 120.sub@H_403_4@

print("减法运算后的值:\(subtraction)")@H_403_4@

@H_403_4@

let multiplication = 39.mul@H_403_4@

print("乘法运算后的值:\(multiplication)")@H_403_4@

@H_403_4@

let division = 55.div@H_403_4@

print("除法运算后的值: \(division)")@H_403_4@

@H_403_4@

let mix = 30.add + 34.sub@H_403_4@

print("混合运算结果:\(mix)")@H_403_4@

以上程序执行输出结果为:@H_403_4@

加法运算后的值:103@H_403_4@

减法运算后的值:110@H_403_4@

乘法运算后的值:390@H_403_4@

除法运算后的值: 11@H_403_4@

混合运算结果:154@H_403_4@

构造器@H_403_4@

扩展可以向已有类型添加新的构造器。@H_403_4@

这可以让你扩展其它类型,将你自己的定制类型作为构造器参数,或者提供该类型的原始实现中没有包含的额外初始化选项。@H_403_4@

扩展可以向类中添加新的便利构造器 init(),但是它们不能向类中添加新的指定构造器或析构函数 deinit() 。@H_403_4@

struct sum {@H_403_4@

var num1 = 100,num2 = 200@H_403_4@

}@H_403_4@

@H_403_4@

struct diff {@H_403_4@

var no1 = 200,no2 = 100@H_403_4@

}@H_403_4@

@H_403_4@

struct mult {@H_403_4@

var a = sum()@H_403_4@

var b = diff()@H_403_4@

}@H_403_4@

@H_403_4@

let calc = mult()@H_403_4@

print ("mult 模块内 \(calc.a.num1,calc.a.num2)")@H_403_4@

print("mult 模块内 \(calc.b.no1,calc.b.no2)")@H_403_4@

@H_403_4@

let memcalc = mult(a: sum(num1: 300,num2: 500),b: diff(no1: 300,no2: 100))@H_403_4@

@H_403_4@

print("mult 模块内 \(memcalc.a.num1,memcalc.a.num2)")@H_403_4@

print("mult 模块内 \(memcalc.b.no1,memcalc.b.no2)")@H_403_4@

@H_403_4@

extension mult {@H_403_4@

init(x: sum,y: diff) {@H_403_4@

_ = x.num1 + x.num2@H_403_4@

_ = y.no1 + y.no2@H_403_4@

}@H_403_4@

}@H_403_4@

@H_403_4@

@H_403_4@

let a = sum(num1: 100,num2: 200)@H_403_4@

print("Sum 模块内:\( a.num1,a.num2)")@H_403_4@

@H_403_4@

@H_403_4@

let b = diff(no1: 200,no2: 100)@H_403_4@

print("Diff 模块内: \(b.no1,b.no2)")@H_403_4@

以上程序执行输出结果为:@H_403_4@

mult 模块内 (100,200)@H_403_4@

mult 模块内 (200,100)@H_403_4@

mult 模块内 (300,500)@H_403_4@

mult 模块内 (300,100)@H_403_4@

Sum 模块内:(100,200)@H_403_4@

Diff 模块内: (200,100)@H_403_4@

方法@H_403_4@

扩展可以向已有类型添加新的实例方法和类型方法。@H_403_4@

下面的例子向Int类型添加一个名为 topics 的新实例方法:@H_403_4@

extension Int {@H_403_4@

func topics(summation: () -> ()) {@H_403_4@

for _ in 0..<self {@H_403_4@

summation()@H_403_4@

}@H_403_4@

}@H_403_4@

} @H_403_4@

@H_403_4@

4.topics({@H_403_4@

print("扩展模块内") @H_403_4@

}) @H_403_4@

@H_403_4@

3.topics({@H_403_4@

print("内型转换模块内") @H_403_4@

}) @H_403_4@

以上程序执行输出结果为:@H_403_4@

扩展模块内@H_403_4@

扩展模块内@H_403_4@

扩展模块内@H_403_4@

扩展模块内@H_403_4@

内型转换模块内@H_403_4@

内型转换模块内@H_403_4@

内型转换模块内@H_403_4@

这个topics方法使用了一个() -> ()类型的单参数,表明函数没有参数而且没有返回值。@H_403_4@

定义该扩展之后,你就可以对任意整数调用 topics 方法,实现的功能则是多次执行某任务:@H_403_4@

可变实例方法@H_403_4@

通过扩展添加的实例方法也可以修改该实例本身。@H_403_4@

结构体和枚举类型中修改self或其属性方法必须将该实例方法标注为mutating,正如来自原始实现的修改方法一样。@H_403_4@

实例@H_403_4@

下面的例子向 Swift 的 Double 类型添加了一个新的名为 square 的修改方法,来实现一个原始值的平方计算:@H_403_4@

extension Double {@H_403_4@

mutating func square() {@H_403_4@

let pi = 3.1415@H_403_4@

self = pi * self * self@H_403_4@

}@H_403_4@

}@H_403_4@

@H_403_4@

var Trial1 = 3.3@H_403_4@

Trial1.square()@H_403_4@

print("圆的面积为: \(Trial1)")@H_403_4@

@H_403_4@

@H_403_4@

var Trial2 = 5.8@H_403_4@

Trial2.square()@H_403_4@

print("圆的面积为: \(Trial2)")@H_403_4@

@H_403_4@

@H_403_4@

var Trial3 = 120.3@H_403_4@

Trial3.square()@H_403_4@

print("圆的面积为: \(Trial3)")@H_403_4@

以上程序执行输出结果为:@H_403_4@

圆的面积为: 34.210935@H_403_4@

圆的面积为: 105.68006@H_403_4@

圆的面积为: 45464.070735@H_403_4@

下标@H_403_4@

扩展可以向一个已有类型添加新下标。@H_403_4@

实例@H_403_4@

以下例子向 Swift 内建类型Int添加了一个整型下标。该下标[n]返回十进制数字@H_403_4@

extension Int {@H_403_4@

subscript(var multtable: Int) -> Int {@H_403_4@

var no1 = 1@H_403_4@

while multtable > 0 {@H_403_4@

no1 *= 10@H_403_4@

--multtable@H_403_4@

}@H_403_4@

return (self / no1) % 10@H_403_4@

}@H_403_4@

}@H_403_4@

@H_403_4@

print(12[0])@H_403_4@

print(7869[1])@H_403_4@

print(786543[2])@H_403_4@

以上程序执行输出结果为:@H_403_4@

2@H_403_4@

6@H_403_4@

5@H_403_4@

嵌套类型@H_403_4@

扩展可以向已有的类、结构体和枚举添加新的嵌套类型:@H_403_4@

extension Int {@H_403_4@

enum calc@H_403_4@

{@H_403_4@

case add@H_403_4@

case sub@H_403_4@

case mult@H_403_4@

case div@H_403_4@

case anything@H_403_4@

}@H_403_4@

@H_403_4@

var print: calc {@H_403_4@

switch self@H_403_4@

{@H_403_4@

case 0:@H_403_4@

return .add@H_403_4@

case 1:@H_403_4@

return .sub@H_403_4@

case 2:@H_403_4@

return .mult@H_403_4@

case 3:@H_403_4@

return .div@H_403_4@

default:@H_403_4@

return .anything@H_403_4@

}@H_403_4@

}@H_403_4@

}@H_403_4@

@H_403_4@

func result(numb: [Int]) {@H_403_4@

for i in numb {@H_403_4@

switch i.print {@H_403_4@

case .add:@H_403_4@

print(" 10 ")@H_403_4@

case .sub:@H_403_4@

print(" 20 ")@H_403_4@

case .mult:@H_403_4@

print(" 30 ")@H_403_4@

case .div:@H_403_4@

print(" 40 ")@H_403_4@

default:@H_403_4@

print(" 50 ")@H_403_4@

@H_403_4@

}@H_403_4@

}@H_403_4@

}@H_403_4@

@H_403_4@

result(numb: [0,1,2,3,4,7])@H_403_4@

以上程序执行输出结果为:@H_403_4@

10@H_403_4@

20@H_403_4@

30@H_403_4@

40@H_403_4@

50@H_403_4@

50@H_403_4@

猜你在找的Swift相关文章