gpt4 book ai didi

ios - 为什么 Xcode/Swift 坚持要求我对 Delegate 和 Data Source 方法使用 override 关键字?

转载 作者:搜寻专家 更新时间:2023-11-01 05:58:37 24 4
gpt4 key购买 nike

如果我像 Xcode 坚持的那样使用 override 关键字,下面的代码绝对可以正常工作...但是如果我删除 override 关键字(如下面的数据源扩展中所示),我会遇到构建错误。我看到人们到处都以完全相同的方式组织他们的代码,但他们没有使用 override 关键字……有什么帮助吗?我的意思是,很明显,如果我只添加 override 关键字,一切都很好,但我想知道“为什么?”。这是 Swift 1.2 中的新内容吗?我只是看到了一堆旧代码?

import UIKit

class EventsTableViewController: UITableViewController {

var events = [Event]()

override func viewDidLoad() {
super.viewDidLoad()

var newEvent = Event(id: 1, type: "Birthday Party", city: "Dallas", state: "TX", date: "Saturday, July 12, 2015", time: "6:00PM - 11:00PM", details: "Some really cool stuff! Sed posuere consectetur est at lobortis. Maecenas faucibus mollis interdum. Maecenas sed diam eget risus varius blandit sit amet non magna. Nulla vitae elit libero, a pharetra augue. Etiam porta sem malesuada magna mollis euismod.")

events.append(newEvent)

newEvent = Event(id: 2, type: "Christmas Party", city: "Houston", state: "TX", date: "Friday, December 11, 2015", time: "6:00PM - 11:00PM", details: "Santa Clause and what not")

events.append(newEvent)
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// cast a var as destination View Controller
let eventDetail = segue.destinationViewController as! EventDetialViewController

// Pass the selected event over
if let indexPath = tableView.indexPathForSelectedRow() {
let selectedEvent = events[indexPath.row]
eventDetail.currentEvent = selectedEvent
}
}

}

// MARK: - Table view data source
extension EventsTableViewController: UITableViewDataSource {

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return events.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("eventCell", forIndexPath: indexPath) as! UITableViewCell

let currentEvent = events[indexPath.row]

cell.textLabel?.text = "\(currentEvent.type) - \(currentEvent.date)"

return cell
}
}

最佳答案

如果您的 View Controller 继承自 UITableViewController,则需要使用 override 关键字,因为 Apple 已经在 UITableViewController 中实现了这些方法,而您正在覆盖它们。

如果您的 View Controller 继承自 UIViewController,并符合 UITableViewDataSource 和 UITableViewDelegate 协议(protocol),那么您不需要 override 关键字,因为您提供了协议(protocol)方法的第一个实现。

关于ios - 为什么 Xcode/Swift 坚持要求我对 Delegate 和 Data Source 方法使用 override 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com