美文网首页一步步学习Swift
Swift学习之优雅的前缀

Swift学习之优雅的前缀

作者: 冷武橘 | 来源:发表于2021-07-14 16:36 被阅读0次

1、为何要加前缀呢?

extension String{
func test() {
print("测试")
}
}
"测试".test()

上面这行简答的代码意思就是给系统String扩充一个test方法而已。考虑到类似得这样的扩充,为了避免与系统的方法重复,最好就是加一个前缀xxx, 像这样”测试”.xxx.test()调用

2、初步设计

struct HT {
    func test() {
        print("测试")
    }
}

extension String{
    var ht:HT {
        return HT()
    }
}

extension UIView{
    var ht:HT {
        return HT()
    }
}

class Student{}
extension  Student{
    var ht:HT {
        return HT()
    }
}
"测试".ht.test()
UIView().ht.test()
Student().ht.test()

上面的代码已经可以实现我们想要的结果,但是很明显有重复的代码

3、使用协议

struct HT {
    func test() {
        print("测试")
    }
}

protocol HTCompatible{}

extension HTCompatible{
    var ht:HT {
        return HT()
    }
}

extension String:HTCompatible{}

extension UIView:HTCompatible{}

"测试".ht.test()
UIView().ht.test()

这样我们通过HTCompatible就可以巧妙地抽取了重复的代码,看起来十分简单优雅。

4、使用泛型


struct HT<Base> {
    var base:Base
    init(_ base:Base) {
        self.base = base
    }
}


protocol HTCompatible{}

extension HTCompatible{
    var ht:HT<Self> {
        return HT(self)
    }
}

extension String:HTCompatible{}

extension UIView:HTCompatible{}

extension HT where Base == String {
    func test() {
        
    }
}

extension HT where Base:UIView{
    func test1() {
        
    }
}

UIView().ht.test1()

"测试".ht.test()

相关文章

网友评论

    本文标题:Swift学习之优雅的前缀

    本文链接:https://www.haomeiwen.com/subject/mrvypltx.html