首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法覆盖“refreshControl”类型的可变属性“UIRefreshControl?”具有协变类型'UIRefreshControl‘

无法覆盖“refreshControl”类型的可变属性“UIRefreshControl?”具有协变类型'UIRefreshControl‘
EN

Stack Overflow用户
提问于 2018-01-17 11:03:00
回答 3查看 5.9K关注 0票数 6

我在我的表视图中使用一个UIRefreshControl来提取新数据。但是,当我定义控件时,下面会显示错误。我搜索了一段时间,但没有发现任何有用的东西。

我使用Xcode版本9.2 (9C40b),swift4,IOS11.2

无法覆盖“refreshControl”类型的可变属性“UIRefreshControl?”具有协变类型'UIRefreshControl‘

代码语言:javascript
复制
var refreshControl = UIRefreshControl()

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-17 11:05:15

如果您想要定义另一个控件,那么更改名称..。refreshControl是自iOS6 10/iOS6 6以来的一种UIScrollView/UITableViewController ivar。您正在尝试重新定义它,这就是导致错误的原因。或者你可以使用提供的一个当然。

你可能是指像self.refreshControl = UIRefreshControl()这样的人

票数 10
EN

Stack Overflow用户

发布于 2020-03-12 11:44:01

迅速4/5

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()

    self.refreshControl = UIRefreshControl()
    self.refreshControl!.attributedTitle = NSAttributedString(string: "Pull to refresh")
    self.refreshControl!.addTarget(self, action: #selector(refresh(sender:)), for: UIControl.Event.valueChanged)

}

@objc func refresh(sender:AnyObject) {
   // Code to refresh table view

    self.refreshControl!.endRefreshing()
}
票数 3
EN

Stack Overflow用户

发布于 2018-05-03 19:57:24

编译器阻止您在子类中指定比超类设置的更严格的要求。

假设编译器允许您用非Optional类型覆盖一个Optional属性。如果有人这样做会发生什么:

代码语言:javascript
复制
let tableView: UITableView = CoolTableViewSubclass()
tableView.refreshControl = nil // but my overridden property can't be nil!

作为子类,当有人把您当作超类对待时,您需要正常工作。所以编译器在这种情况下会阻止您,因为它已经可以判断您正在违反此规则。

如果你好奇的话,迈克·阿什( Mike )在一篇很好的帖子里写了这篇文章。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48299533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档