swift中多继承的实现

Posted chzheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift中多继承的实现相关的知识,希望对你有一定的参考价值。

1. 实现过程

swift本身并不支持多继承,但我们可以根据已有的API去实现. 

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()
 

来源:SwiftTips记录iOS开发中的一些知识点

这位大哥总结的好多知识点都是精华,推荐阅读!

以上是关于swift中多继承的实现的主要内容,如果未能解决你的问题,请参考以下文章

Java中多继承的实现

java中多线程的两种创建方式

最近在研究多线程,浅谈JAVA中多线程的几种实现方式

java中多线程实现方式

swift常用代码片段

JAVA-面向对象2--继承 ,多态