iOS之Swift基础知识iOS之Swift功能细节

Swift protocol的默认实现

2017-08-20  本文已影响45人  fd5657ed541e

Swift 中 protocol 的默认实现能为我们省去许多重复的代码. 没必要一一实现便能免费得到某些属性或者功能.
但还是有些同学(My stupid little cousin, Just Lee)容易忽略默认实现这个点的细节, 比如下面的例子:

写法1:

protocol UITextDisplay {
    
    var value: String { get }
}

extension UITextDisplay where Self: UILabel {
    var value: String {
        return text ?? ""
    }
}

extension UITextDisplay where Self: UIButton {
    var value: String {
        return title(for: .normal) ?? title(for: .selected) ?? ""
    }
}

extension UITextDisplay where Self: UITextField {
    var value: String {
        return text ?? ""
    }
}

extension UITextDisplay where Self: UITextView {
    var value: String {
        return text ?? ""
    }
}

extension UILabel: UITextDisplay {
}

extension UIButton: UITextDisplay {
}

extension UITextField: UITextDisplay {
}

extension UITextView: UITextDisplay {
}

写法2:

protocol UITextDisplay {
    
    var value: String { get }
}

extension UILabel: UITextDisplay {
    var value: String {
        return text ?? ""
    }
}

extension UIButton: UITextDisplay {
    var value: String {
        return title(for: .normal) ?? title(for: .selected) ?? ""
    }
}

extension UITextField: UITextDisplay {
    var value: String {
        return text ?? ""
    }
}

extension UITextView: UITextDisplay {
    var value: String {
        return text ?? ""
    }
}

看起来写法2更简单, 代码量更少, 但是写法1提供的是默认实现, UILabel, UIButton, 可以重新实现 value 属性, 相对来讲提供的接口更灵活.

上一篇 下一篇

猜你喜欢

热点阅读