IT门户网,专注电脑知识与技术及手机硬件信息服务网站!

当前位置:IT门户网 > 系统教程 >

谈谈iOS中的多担任与多重署理

时间:2021-09-14    来源:IT门户网    人气:

和多重署理在swift的语言层面上是不支持的,但我们有时会碰着这样的问题:

类B和C别离担任自A,B1和B2担任自B,C1和C2担任自C.此刻我们需要在B1和C1中添加沟通的要领,怎么去做?利用担任的话只能在类A中添加,但这样做的功效是基类A会越来越臃肿,最后酿成上帝类God Class,维护起来会很坚苦.

在实现完某个署理后发明,我们还要在其他页面中获取数据.譬喻,IM动静吸收之后要在多个处所做回调,好比显示动静内容页面,改变小红点,显示动静数.即一对多的模式,我们第一回响是用通知,但通知照旧能罕用就罕用,用多了代码的可阅读性会大大低落.

面临第一种环境,最好的办理要领是,B1和C1的民众要领专门封装到一个处所,需要的时候就挪用一下,多担任就是一个最好的办理方案.

1. 多担任

1. 实现进程

swift中的类可以遵守多个协议,可是只可以担任一个类,而值范例(布局体和列举)只能遵守单个或多个协议,不能做担任操纵.

多担任的实现:协议的要领可以在该协议的extension中实现

protocol Behavior { func run()}extension Behavior { func run() { print("Running...") }}struct Dog: Behavior {}let myDog = Dog()myDog.run() // Running...

无论是布局体照旧类照旧列举都可以遵守多个协议,所以要实现多担任,无非就是多遵守几个协议的问题.

下面举个例子.

2. 通过多担任为UIView扩展要领

// MARK: - 闪烁成果protocol Blinkable { func blink()}extension Blinkable where Self: UIView { func blink() { alpha = 1 UIView.animate( withDuration: 0.5, delay: 0.25, options: [.repeat, .autoreverse], animations: { self.alpha = 0 }) }}// MARK: - 放大和缩小protocol Scalable { func scale()}extension Scalable where Self: UIView { func scale() { transform = .identity UIView.animate( withDuration: 0.5, delay: 0.25, options: [.repeat, .autoreverse], animations: { self.transform = CGAffineTransform(scaleX: 1.5, y: 1.5) }) }}// MARK: - 添加圆角protocol CornersRoundable { func roundCorners()}extension CornersRoundable where Self: UIView { func roundCorners() { layer.cornerRadius = bounds.width * 0.1 layer.masksToBounds = true }}extension UIView: Scalable, Blinkable, CornersRoundable {} cyanView.blink() cyanView.scale() cyanView.roundCorners()

iOS,多担任,多重署理

这样,假如我们自界说了其他View,只需要放大和缩小结果,遵守Scalable协议就可以啦!

3. 多担任钻石问题(Diamond Problem),及办理步伐

请看下面代码

protocol ProtocolA { func method()}extension ProtocolA { func method() { print("Method from ProtocolA") }}protocol ProtocolB { func method()}extension ProtocolB { func method() { print("Method from ProtocolB") }}class MyClass: ProtocolA, ProtocolB {}

此时ProtocolA和ProtocolB都有一个默认的实现要领method(),由于编译器不知道担任过来的method()要领是哪个,就会报错.

上一篇:IOS开拓之CocoaPods安装和利用教程 下一篇:没有了

相关文章

系统教程排行榜

更多>>

网络知识排行榜

更多>>

系统教程排行榜

更多>>

服务号