En Comparant NSIndexPath Swift
Si j'ai un NSIndexPath constant a déclaré pour une UITableView, est-il valable pour les comparer à l'aide de la ==
opérateur?
C'est ma déclaration de constante:
let DepartureDatePickerIndexPath = NSIndexPath(forRow: 2, inSection: 0)
Et puis ma fonction:
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
}
Certes cela fonctionne correctement, mais est-il sécuritaire de le faire? Je suppose que depuis qu'il travaille, le ==
opérateur sur le NSIndexPath objet est de comparer la section de ligne et de propriétés, au lieu de l'instance.
Vous devez vous connecter pour publier un commentaire.
Nous allons faire très simple:
Oui, il est sûr à utiliser
==
avec NSIndexPathComme une note de côté,
==
dans Swift est toujours pour les comparaisons de la valeur.===
est utilisé pour détecter quand les deux variables de référence exactement la même instance. Fait intéressant, laindexPath1 === indexPath2
montre que NSIndexPath est construit à partager la même instance toutes les fois que les valeurs correspondent, de sorte que même si vous étiez en comparant les cas, il serait toujours valide.==
opérateur aurait comparé les instances?==
est en fait défini dans C. Ainsi, vous comparez les deux pointeurs en Objective-C (les deux variables pointant vers la même place en mémoire). Swift a déménagé loin de C et de toutes les classes ont à définir leur propre==
de l'opérateur. Toutes les instances de NSObject utilisationisEqual:
de Objective-C pour==
comparaisonitem
au lieu derow
)Avec Swift, vous pouvez utiliser
NSIndexPath
ouIndexPath
. Les deux ont la même stratégie pour comparer.#1.
NSIndexPath
Selon la Documentation d'Apple,
NSIndexPath
est conforme àEquatable
protocole. Par conséquent, vous pouvez utiliser==
ou!=
opérateurs afin de comparer deux instances deNSIndexPath
.#2.
IndexPath
Apple états de documentation sur
NSIndexPath
etIndexPath
:Cela signifie que, comme une alternative à
NSIndexPath
, à commencer par Swift 3 et Xcode 8, vous pouvez utiliserIndexPath
. Notez queIndexPath
est également conforme àEquatable
protocole. Par conséquent, vous pouvez utiliser==
ou!=
opérateurs afin de comparer deux instances.