如何比较两个可选的NSArrays在Swift [英] how to compare two optional NSArrays in Swift
问题描述
我们有两个可选的NSArrays。目标是检查,如果他们是平等的。我的解是
func isArrayEqualToArray(array1:NSArray ?, array2:NSArray?) - > Bool {
let areBothEmpty:Bool = array1 == nil&& array2 == nil
var areBothEqual:Bool
if!areBothEmpty&& array2!= nil {
areBothEqual = array1?.isEqualToArray(array2!)? false
} else {
areBothEqual = false
}
let result = areBothEqual || areBothEmpty
return result
}
我觉得这有点太冗长。它应该以更简洁和可读的方式做。
这很简单:
func isArrayEqualToArray(array1:NSArray ?, array2:NSArray?) - > Bool {
return array1 == array2
}
这里
==
是比较可选项的运算符 func ==< T:Equatable>(lhs:T?,rhs:T?) - Bool
,如果两个操作数都为 true
是 nil
,或两个
操作数都是非nil,且展开的操作数相等。
另外 NSArray
继承自 NSObject
,符合 Equatable
,
并将与
==
比较使用
isEqual:
方法,它是
实现为 isEqualToArray:
在 NSArray
。
因此
array1 == array2
给出与
相同的结果 array1.isEqualToArray(array2)
Let's have two optional NSArrays. The goal is to check, if they are equal. My solution is
func isArrayEqualToArray(array1:NSArray?, array2:NSArray?) -> Bool {
let areBothEmpty:Bool = array1 == nil && array2 == nil
var areBothEqual:Bool
if !areBothEmpty && array2 != nil {
areBothEqual = array1?.isEqualToArray(array2!) ?? false
} else {
areBothEqual = false
}
let result = areBothEqual || areBothEmpty
return result
}
I feel that it is a little too verbose. It should be doable in a more concise and readable way. Does anyone have a better solution?
It is quite simple:
func isArrayEqualToArray(array1: NSArray?, array2: NSArray?) -> Bool {
return array1 == array2
}
does exactly what you want.
Why does it work? Here ==
is the operator that compares optionals
func ==<T : Equatable>(lhs: T?, rhs: T?) -> Bool
and that gives true
if both operands are nil
, or of both
operands are non-nil and the unwrapped operands are equal.
Also NSArray
inherits from NSObject
which conforms to Equatable
,
and comparing NSObject
s with ==
uses the isEqual:
method, which is
implemented as isEqualToArray:
on NSArray
.
Therefore
array1 == array2
gives the same result as
array1.isEqualToArray(array2)
这篇关于如何比较两个可选的NSArrays在Swift的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!