据我所知,在Swift中你不需要导入你的课程(仅适用于某些框架),但需要进行入学,但令我惊讶的是,这可能不是真的,我创建了一个自定义类({{ 1}})对于我在UITableView中使用的自定义单元格,显然在使用之前不需要创建自定义类的实例。以下是我使用它的方式。
CustomCell Class
CustomCell.swift
查看控制器
// CustomCell.swift
import UIKit
class CustomCell: UITableViewCell {
@IBOutlet weak var labelDisplayWattage: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
正如您所看到的,// ViewController.swift
import UIKit
class ViewController: UIViewController, UITableViewDataSource {
// some code ...
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("reusableCell", forIndexPath: indexPath) as! CustomCell
cell.labelDisplayWattage.text = String(totalWattageList[indexPath.row])
return cell
}
}
类没有针对方法CustomCell
(cellForRowAtIndexPath
)调用的实例。
有人可以告诉我为什么在方法as! CustomCell
中使用它之前不需要创建类CustomCell
的实例?我期待看到类似......
cellForRowAtIndexPath
由于
答案 0 :(得分:2)
根据数据源方法的苹果文档
func dequeueReusableCellWithIdentifier(_ identifier: String,forIndexPath indexPath: NSIndexPath) -> UITableViewCell
出于性能原因,通常应该使用表视图的数据源 在将单元格分配给其中的行时,重用UITableViewCell对象 tableView:cellForRowAtIndexPath:方法。表视图维护一个 数据源具有的UITableViewCell对象的队列或列表 标记为重用。何时从数据源对象中调用此方法 要求为表格视图提供新单元格。 此方法出列 现有单元格(如果有单元格可用),或基于创建新单元格 您之前注册的类或nib文件,并将其添加到 表强>
所以基本上如果队列为空,它会为你创建一个新对象。
答案 1 :(得分:1)
let cell = tableView.dequeueReusableCellWithIdentifier("reusableCell", forIndexPath: indexPath) as! CustomCell
CustomCell的实例化是tableview的责任,我们只是获取单元格,如果在我们获取它时未实例化单元格,则tableview将在将其返回给我们之前对其进行实例化。
此行为属于架构设计,并非特定于swift。对于objective-c,它也以相同的方式工作。
答案 2 :(得分:1)
您现在看到的代码下面有一个非常重要的概念。如果您正在使用故事板,则表视图和集合视图可以选择使用原型单元。原型单元格是可以/将与表视图或集合视图一起使用的单元格的模板。如果您的表/集合视图设置为使用原型单元格,则无需创建新单元格,UIKit
会在您通过调用tableView.dequeueReusableCellWithIdentifier
请求排队的单元格时为您创建一个单元格
使用原型单元格 NOT 时请考虑以下事项:
// ViewController.swift
import UIKit
class ViewController: UIViewController, UITableViewDataSource {
// some code ...
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("reusableCell", forIndexPath: indexPath) as? CustomCell
if nil == cell {
cell = CustomCell()
// more cell options can be set here
}
cell.labelDisplayWattage.text = String(totalWattageList[indexPath.row])
return cell
}
}