我正在学习swift 2.0,我想知道您是否仍然需要添加代码tableView.datasource =self
并tableView.delegate = self
像在Obj-C中那样遵守协议?
示例代码:
class AboutViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
{
override func viewDidLoad()
{
super.viewDidLoad()
// conform to protocols
aboutTableView.dataSource = self
aboutTableView.delegate = self
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return 2
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
{
return 50
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
// Code here
}
}
现在,表格视图会在每个单元格中加载正确的数据。
但是,如果我从中删除aboutTableView.datasource =self
和,则表视图为空白。为什么是这样?aboutTableView.delegate = self``viewDidLoad
仍然需要此代码,因为我很快就看到许多YouTube教程不再包含此代码,而我困惑为什么没有它我的代码就不起作用?
首先,这完全与您使用的语言(Swift或Objective-C)无关。
但是,有两种情况可能会引起混淆:
一个UITableViewController
子类:
UITableViewController
已经符合UITableViewDataSource
和UITableViewDelegate
。它有一个tableView
特性,它dataSource
和delegate
属性已经被设置为self
。
在子类中,通常 会覆盖 数据源和委托方法。
UIViewController
具有UITableView
属性的子类:
在这里,您已经UITableView
在子类中定义了一个属性,并在您的代码中对其进行了初始化,或者将其连接到接口构建器中的表视图。
在这种情况下,您必须 在代码或接口构建器中设置tableview 的dataSource
and
delegate
属性,如luk2302的answer中所述。
如果数据源和委托是视图控制器本身,则必须显式声明协议一致性,并 实现 数据源和委托方法(但不能 覆盖 超类方法)。
当然,在两种情况下,都可以将表视图数据源和委托设置为 不同的 对象,而不必是视图控制器本身。
问题内容: 尝试符合Swift UIViewController子类中的UITableViewDataSource和UITableViewDelegate。 文件说,你应该在符合行后但那通常在超去。另一个不起作用。在超类之后使用逗号分隔的列表也不起作用 编辑: 还必须采用每种协议的所有必需方法,而我最初并未这样做。 问题答案: 您使用逗号: 但是要意识到,超类必须是逗号分隔列表中的第一项。 如果您
问题内容: 在以前的Swift版本中,我有以下代码。 在最新版本的Swift 1.2中,我现在收到以下错误。 所以我将代码更改如下: 但这是行不通的。我现在收到以下错误消息。 使用Swift 1.2获取字符串长度的正确方法是什么? 问题答案: 您可以使用扩展名,例如: 您可以使用它: 或者,您可以直接通过这种方式进行计数: 这也为我工作: 对于 Swift 2.0: 另一个扩展: 如果要直接使用:
问题内容: 我在AppDelegate中,尝试传递对WatchKit扩展请求的答复。我不能使用枚举数组作为其值键入为AnyObject的Dictionary中的值。在操场上进行实验显示: 当然,可以通过将枚举转换为字符串或数字来解决此问题,但是为什么这在Swift中是类型错误? 问题答案: 为了与Objective-C兼容而存在。您只能将对象放入Objective- C可以解释的数组中。Swift
问题内容: 我试图在我快速编写的类上使用NSCoding协议,但是似乎无法弄清楚为什么当我实现所需的方法时,编译器会抱怨它“不符合协议NSCoding”: 这是一个错误还是我只是缺少一些东西? 问题答案: 如您在报告导航器中详细的编译器消息中所见,您的方法未正确声明: (在beta版本之间可能有所变化。)此外,该方法必须标记为: 在 Swift 3中 ,所需的方法是
在以前版本的Swift中,我有以下代码。 在Swift1.2的最新版本中,我现在得到以下错误。 因此我更改代码如下: 用Swift1.2得到字符串长度的正确方法是什么?
问题内容: 在Objective-C中: 在Swift中: 但是,将出现一条错误消息: 类型“ CellDatasDataSource”不符合协议“ NSObjectProtocol” 类型“ CellDatasDataSource”不符合协议“ UITableViewDataSource” 正确的方法应该是什么? 问题答案: 类型“ CellDatasDataSource”不符合协议“ NSOb