如果我为UITableView声明了一个NSIndexPath常量,那么使用==运算符进行比较是否有效?
这是我的常量声明:
let DepartureDatePickerIndexPath = NSIndexPath(forRow: 2, inSection: 0)然后是我的函数:
override func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat {
var height: CGFloat = 45
if indexPath == DepartureDatePickerIndexPath{
height = departureDatePickerShowing ? 162 : 0
} else if indexPath == ArrivalDatePickerIndexPath {
height = arrivalDatePickerShowing ? 162 : 0
}
return height
}这当然可以正常工作,但是这样做安全吗?我假设由于它可以工作,所以NSIndexPath对象上的==操作符比较的是区段和行属性,而不是实例。
发布于 2014-08-07 08:54:54
让我们做一个非常简单的测试:
import UIKit
var indexPath1 = NSIndexPath(forRow: 1, inSection: 0)
var indexPath2 = NSIndexPath(forRow: 1, inSection: 0)
var indexPath3 = NSIndexPath(forRow: 2, inSection: 0)
var indexPath4 = indexPath1
println(indexPath1 == indexPath2) // prints "true"
println(indexPath1 == indexPath3) // prints "false"
println(indexPath1 == indexPath4) // prints "true"
println(indexPath1 === indexPath2) // prints "true"
println(indexPath1 === indexPath3) // prints "false"
println(indexPath1 === indexPath4) // prints "true"是的,在NSIndexPath中使用==是安全的
顺便说一句,Swift中的==总是用于价值比较。===用于检测两个变量何时引用完全相同的实例。有趣的是,indexPath1 === indexPath2显示NSIndexPath被构建为在值匹配时共享相同的实例,因此即使您比较实例,它仍然是有效的。
发布于 2017-10-14 19:41:29
在Swift中,您可以使用NSIndexPath或IndexPath。两者都有相同的策略进行比较。
#1. NSIndexPath
根据苹果公司的文档,NSIndexPath符合Equatable协议。因此,您可以使用==或!=运算符来比较NSIndexPath的两个实例。
#2. IndexPath
关于NSIndexPath和IndexPath的苹果文档说明
基础框架的Swift覆盖提供了
IndexPath结构,它桥接到NSIndexPath类。
这意味着,从Swift 3和Xcode8开始,您可以使用IndexPath作为NSIndexPath的替代方案。请注意,IndexPath也符合Equatable协议。因此,您可以使用==或!=运算符来比较它的两个实例。
https://stackoverflow.com/questions/25172525
复制相似问题