我在tableview中使用UIRefreshControl
来获取新数据。但是当我定义控件时,错误显示如下。我已经搜索了一段时间,但没有找到任何有用的东西。
我使用Xcode版本9.2(9C40b),swift4,IOS11.2
无法覆盖mutable属性' refreshControl'类型 ' UIRefreshControl&#39?;与协变类型' UIRefreshControl'
var refreshControl = UIRefreshControl()
答案 0 :(得分:5)
如果你想定义另一个控件,那么更改名称...... refreshControl
是一个UIScrollView/UITableViewController
ivar,因为iOS10 / iOS6 [分别]。您正在尝试重新定义它,这就是导致错误的原因。或者你可以使用提供的那个。
你的意思可能是self.refreshControl = UIRefreshControl()
答案 1 :(得分:2)
迅速4/5
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()
}
答案 2 :(得分:0)
编译器阻止您在子类中指定比超类设置的更严格的要求。
假设编译器允许您覆盖非Optional
类型的Optional
属性。如果有人这样做会发生什么:
let tableView: UITableView = CoolTableViewSubclass()
tableView.refreshControl = nil // but my overridden property can't be nil!
作为一个子类,当有人像对待你的超类一样对待你时,你需要工作正常。因此,在这种情况下,编译器会阻止您,因为它已经可以告诉您违反此规则。
Mike Ash wrote this up in an unsurprisingly good post if you're curious.