从学习Swift语言的协议与扩展看代码复用

 

在Swift语言学习中,协议与扩展是实现代码复用、增强代码灵活性的重要特性。它们让代码更具模块化与可维护性,在实际开发里作用显著。

协议:定义行为契约,实现多态复用

协议定义了属性和方法的蓝图,但不包含具体实现,任何类型只要满足协议要求,就能被视为遵循该协议。这为代码复用提供了强大支持。

比如在一个图形绘制项目里,定义Shape协议,包含计算面积和绘制的方法:
protocol Shape {
    var area: Double { get }
    func draw()
}
然后让Circle和Rectangle结构体遵循Shape协议:
struct Circle: Shape {
    let radius: Double
    var area: Double {
        return Double.pi * radius * radius
    }
    func draw() {
        print("绘制半径为\(radius)的圆")
    }
}

struct Rectangle: Shape {
    let width: Double
    let height: Double
    var area: Double {
        return width * height
    }
    func draw() {
        print("绘制宽为\(width),高为\(height)的矩形")
    }
}
通过协议,可将不同类型的形状统一处理,实现代码复用。例如定义一个绘制函数,接受Shape类型参数:
func drawShapes(_ shapes: [Shape]) {
    for shape in shapes {
        shape.draw()
    }
}

let shapes: [Shape] = [Circle(radius: 5), Rectangle(width: 4, height: 6)]
drawShapes(shapes)
这样,添加新的形状类型时,只要遵循Shape协议,就能直接使用drawShapes函数,无需修改函数代码。

扩展:拓展已有类型,减少重复代码

扩展能为已有类型添加新功能,无需继承或修改原始类型代码,是实现代码复用的另一利器。

比如为Int类型扩展一个计算阶乘的方法:
extension Int {
    func factorial() -> Int {
        var result = 1
        for i in 1...self {
            result *= i
        }
        return result
    }
}

let num = 5
print("\(num)的阶乘是\(num.factorial())")
在iOS开发中,常为UIView扩展便捷方法。例如为UIView添加设置圆角的扩展:
extension UIView {
    func setCornerRadius(_ radius: CGFloat) {
        layer.cornerRadius = radius
        layer.masksToBounds = true
    }
}

let view = UIView()
view.setCornerRadius(10)
通过扩展,可将通用功能集中管理,一处定义,多处使用,极大减少重复代码,提升开发效率。

Swift的协议与扩展从不同角度实现代码复用。协议通过行为抽象,让不同类型统一协作;扩展为已有类型注入新能力,避免重复开发。掌握并运用好它们,能编写出更简洁、灵活、可维护的Swift代码 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值