Swift 优雅的协议扩展

本文介绍了一种使用Swift协议扩展来实现字符串MD5加密的方法。通过定义协议和结构体,可以轻松地为String类型添加扩展属性及方法,如MD5加密等,从而减少代码耦合度并提高代码复用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

仿view.snp.xxx的调用形式

先看调用效果:“123456”.yy_Str.MD5ForLower32Bate()

"123456".yy_Str.MD5ForLower32Bate()
//类似:view.snp.xxx

为什么要这么做呢?好处在哪呢?

  1. 降低耦合度:传统的写法,直接在类别中添加一个方法或属性例如:
extension String {
   
    ///验证身份证号
    func validateidnum() -> Bool {
   
        let idRegex = "^(\\d{14}|\\d{17})(\\d|[xX])$"
        let idTest:NSPredicate = NSPredicate(format: "SELF MATCHES %@", idRegex)
        return idTest.evaluate(with: self)
    }
}
  1. 降低不必要的冲突:当另一个工程师也有类似的需求时,他也新建文件写啦同样的方法,这就会有冲突,然后排查…
  2. 只需要一个属性,就能实现想要的扩展功能,代码简洁

如何实现

定义协议:YProtocolExtension.swift

//协议扩展
protocol YExtensionProtocol {
   
    associatedtype YExtensionType //给谁写扩展例如:UIView、String、UIButton
    var value: YExtensionType {
    get }
}
  1. 定义一个实现该协议的结构体
struct YExtensionKitStructTypeEncodable<T>: YExtensionProtocol {
   
///实现协议的属性
    var value: T
    typealias YExtensionType = T //指定类型(传入泛型)
    /// 构造方法
    init(kit: T) {
   
        self.value = kit
    }
}
  1. 同样我们也可以直接指定类型
struct YExtensionStringEncodable: YExtensionProtocol {
   
///实现协议的属性
    var value: String
    typealias YExtensionType = String //指定类型
    /// 构造方法
    init(kit: String) {
   
        self.value = kit
    }
}
  1. 扩展YExtensionProtocol,实现相关String中MD5加密的功能

注意:凡是协议中定义的函数自己在协议中实现啦,他就是可选的类型,反之,是继承协议着必须实现。

String为例:MD5加密

import CommonCrypto

//MARK:String-MD5加密32位
//where YExtensionType == String 指定YExtensionType:为那种类型
extension YExtensionProtocol where YExtensionType == String {
   
    ///MD5加密32位小写
    func MD5ForL
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值