Swift面向协议编程面试回答

1. 面向协议的理解

参考博客

2. Swift对所有类型进行扩展,只需要遵守协议即可

直接上demo

//1.结构体--泛型
struct JH<Base> {
    var base : Base
    init(_ base: Base) {
        self.base = base
    }
}

//2.协议
protocol JHCompatibal {
    
}
//3.扩展协议 添加 set get 方法
extension JHCompatibal {
    var jh: JH<Self> {
        set {}
        get {
            JH(self)
        }
    }
    static var jh: JH<Self>.Type {
        set {}
        get {
            JH<Self>.self
        }
    }
}

例如,我想让String扩展某些功能

extension String: JHCompatibal {}
extension JH where Base == String {
    
    var numberCount: Int {
        var count = 0
        for c in base where ("0"..."9").contains(c) {
            count += 1
        }
        return count
    }
    
    func deleteChar(_ resStrType: resStrType) -> String {
        var resultStrNumber = ""
        var resultStrChar = ""
        for c in base {
            if ("a"..."z").contains(c) || ("A"..."Z").contains(c){
                resultStrChar.append(c)
            }
            if ("0"..."9").contains(c) || c == "." {
                resultStrNumber.append(c)
            }
        }
        switch resStrType {
        case .Int:
            return resultStrNumber
        case .String:
            return resultStrChar
        }
    }
}

/// 使用
let count = "abc000".jh.numberCount

或者想让Int扩展某些功能

extension Int: JHCompatibal {}
extension JH where Base == Int {
    var doubleValue: Int {
        return self.base * 2
    }
}
/// 使用
let doubleV = 2.jh.doubleValue
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值