如何覆盖继承 类 扩展中的函数?
How to override function in extensions for inherited classes?
我有一个 scrollToBottom
函数用于 UIScrollView
和 UITableView
。问题是它们相互冲突并出现错误:Declarations in extensions cannot override yet
这是我的:
extension UIScrollView {
func scrollToBottom(animated: Bool = true) {
...
}
}
extension UITableView {
func scrollToBottom(animated: Bool = true) {
...
}
}
由于 UITableView
继承自 UIScrollView
,因此不允许我这样做。我怎样才能做到这一点?
创建协议 ScrollableToBottom
并在其中定义您的方法:
protocol ScrollableToBottom {
func scrollToBottom(animated: Bool)
}
使 UIScrollView
和 UITableView
从它继承:
extension UIScrollView: ScrollableToBottom { }
extension UITableView: ScrollableToBottom { }
然后你只需要扩展你的协议约束 Self
到特定的 class:
extension ScrollableToBottom where Self: UIScrollView {
func scrollToBottom(animated: Bool = true) {
}
}
extension ScrollableToBottom where Self: UITableView {
func scrollToBottom(animated: Bool = true) {
}
}
您可以使用默认实现的协议扩展
protocol CanScrollBottom {
func scrollToBottom()
}
extension CanScrollBottom where Self: UIScrollView {
func scrollToBottom() {
//default implementation
}
}
extension UIScrollView: CanScrollBottom { }
extension UITableView {
func scrollToBottom() {
//override default implementation
}
}
我有一个 scrollToBottom
函数用于 UIScrollView
和 UITableView
。问题是它们相互冲突并出现错误:Declarations in extensions cannot override yet
这是我的:
extension UIScrollView {
func scrollToBottom(animated: Bool = true) {
...
}
}
extension UITableView {
func scrollToBottom(animated: Bool = true) {
...
}
}
由于 UITableView
继承自 UIScrollView
,因此不允许我这样做。我怎样才能做到这一点?
创建协议 ScrollableToBottom
并在其中定义您的方法:
protocol ScrollableToBottom {
func scrollToBottom(animated: Bool)
}
使 UIScrollView
和 UITableView
从它继承:
extension UIScrollView: ScrollableToBottom { }
extension UITableView: ScrollableToBottom { }
然后你只需要扩展你的协议约束 Self
到特定的 class:
extension ScrollableToBottom where Self: UIScrollView {
func scrollToBottom(animated: Bool = true) {
}
}
extension ScrollableToBottom where Self: UITableView {
func scrollToBottom(animated: Bool = true) {
}
}
您可以使用默认实现的协议扩展
protocol CanScrollBottom {
func scrollToBottom()
}
extension CanScrollBottom where Self: UIScrollView {
func scrollToBottom() {
//default implementation
}
}
extension UIScrollView: CanScrollBottom { }
extension UITableView {
func scrollToBottom() {
//override default implementation
}
}