Ios 理解Swift中的实例化-为什么不在自定义类中使用require
我的理解是,在Swift中,您不需要导入类(仅针对某些框架),但需要进行插入,但令我惊讶的是,这可能不是真的,我创建了一个自定义类(Ios 理解Swift中的实例化-为什么不在自定义类中使用require,ios,swift,uitableview,swift2,Ios,Swift,Uitableview,Swift2,我的理解是,在Swift中,您不需要导入类(仅针对某些框架),但需要进行插入,但令我惊讶的是,这可能不是真的,我创建了一个自定义类(CustomCell.Swift)对于我在UITableView中使用的自定义单元格,显然在使用它之前不需要创建自定义类的实例。下面是我如何使用它 自定义单元类 // CustomCell.swift import UIKit class CustomCell: UITableViewCell { @IBOutlet weak var labelDi
CustomCell.Swift
)对于我在UITableView中使用的自定义单元格,显然在使用它之前不需要创建自定义类的实例。下面是我如何使用它
自定义单元类
// 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
类的实例没有被调用方法cellforrowatinexpath
(As!CustomCell
)
有人能告诉我为什么在方法cellforrowatinexpath
中使用类CustomCell
之前不需要创建它的实例吗?我期待着看到像
var myCustomCell = CustomCell()
根据apple docs提供的数据源方法,谢谢
func dequeueReusableCellWithIdentifier(_ identifier: String,forIndexPath indexPath: NSIndexPath) -> UITableViewCell
出于性能原因,表视图的数据源通常应
当UITableViewCell对象将单元格指定给其
tableView:cellForRowAtIndexPath:method。表视图维护一个
数据源具有的UITableViewCell对象的队列或列表
标记为可重复使用。在以下情况下从数据源对象调用此方法:
要求为表视图提供新单元格此方法将退出队列
现有单元格(如果可用),或基于
以前注册的类或nib文件,并将其添加到
表。
因此,如果队列为空,它基本上会为您创建一个新对象
来源::根据apple docs for Datasource方法
func dequeueReusableCellWithIdentifier(_ identifier: String,forIndexPath indexPath: NSIndexPath) -> UITableViewCell
出于性能原因,表视图的数据源通常应
当UITableViewCell对象将单元格指定给其
tableView:cellForRowAtIndexPath:method。表视图维护一个
数据源具有的UITableViewCell对象的队列或列表
标记为可重复使用。在以下情况下从数据源对象调用此方法:
要求为表视图提供新单元格此方法将退出队列
现有单元格(如果可用),或基于
以前注册的类或nib文件,并将其添加到
表。
因此,如果队列为空,它基本上会为您创建一个新对象
来源::
CustomCell的实例化是tableview的责任,我们只获取该单元格,如果在获取该单元格时该单元格未实例化,tableview将在将其返回给我们之前对其进行实例化
这种行为属于建筑设计,而不是swift特有的。对于objective-c,它也以同样的方式工作
CustomCell的实例化是tableview的责任,我们只获取该单元格,如果在获取该单元格时该单元格未实例化,tableview将在将其返回给我们之前对其进行实例化
这种行为属于建筑设计,而不是swift特有的。对于objective-c,它也以同样的方式工作 您现在看到的代码下面有一个非常重要的概念。如果使用的是故事板,则表视图和集合视图可以选择使用原型单元。原型单元格是可以/将与表视图或集合视图一起使用的单元格模板。如果您的表/集合视图设置为使用原型单元格,则无需创建新单元格,
UIKit
通过调用tableView.dequeueReusableCellWithIdentifier
为您创建一个排队单元格
当不使用原型单元时,请考虑以下事项:
// 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
}
}
在您现在看到的代码下面有一个非常重要的概念。如果使用的是故事板,则表视图和集合视图可以选择使用原型单元。原型单元格是可以/将与表视图或集合视图一起使用的单元格模板。如果您的表/集合视图设置为使用原型单元格,则无需创建新单元格,
UIKit
通过调用tableView.dequeueReusableCellWithIdentifier
为您创建一个排队单元格
当不使用原型单元时,请考虑以下事项:
// 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
}
}
是的,我用的是一个原型电池。谢谢,是的,我用的是原型电池。谢谢