如何比较 Swift 中的两个可选 NSArray
how to compare two optional NSArrays in Swift
让我们有两个可选的 NSArray。目标是检查它们是否相等。我的解决方案是
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 {
if array1 == nil && array2 == nil {
return true;
}
if array1 != nil && array2 != nil {
return array1!.isEqualToArray(array2!);
}
return false;
}
使用switch
语句可能更清楚:
func isArrayEqualToArray(a1: NSArray?, a2: NSArray?) -> Bool {
switch (a1,a2) {
case (.Some(a1),.Some(a2)):
return a1.isEqualToArray(a2)
case (.None,.None):
return true
default:
return false
}
}
很简单:
func isArrayEqualToArray(array1: NSArray?, array2: NSArray?) -> Bool {
return array1 == array2
}
完全符合您的要求。
为什么起作用?这里==
是比较optionals的运算符
func ==<T : Equatable>(lhs: T?, rhs: T?) -> Bool
如果两个操作数都是 nil
或两者兼而有之,则给出 true
操作数非零且展开的操作数相等。
也NSArray
继承自NSObject
,符合Equatable
,
并将 NSObject
s 与 ==
进行比较使用 isEqual:
方法,即
在 NSArray
上实施为 isEqualToArray:
。
因此
array1 == array2
给出与
相同的结果
array1.isEqualToArray(array2)
我喜欢@The Paramagnetic Croiss 的回答,但我仍然会缩短它一点,因为我知道我可以。
```
func isArrayEqualToArray(array1: NSArray?, array2: NSArray?) -> Bool {
if array1 == array2 {
return true;
}
if array1 != nil && array2 != nil {
return array1!.isEqualToArray(array2!);
}
return false;
}
```
让我们有两个可选的 NSArray。目标是检查它们是否相等。我的解决方案是
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 {
if array1 == nil && array2 == nil {
return true;
}
if array1 != nil && array2 != nil {
return array1!.isEqualToArray(array2!);
}
return false;
}
使用switch
语句可能更清楚:
func isArrayEqualToArray(a1: NSArray?, a2: NSArray?) -> Bool {
switch (a1,a2) {
case (.Some(a1),.Some(a2)):
return a1.isEqualToArray(a2)
case (.None,.None):
return true
default:
return false
}
}
很简单:
func isArrayEqualToArray(array1: NSArray?, array2: NSArray?) -> Bool {
return array1 == array2
}
完全符合您的要求。
为什么起作用?这里==
是比较optionals的运算符
func ==<T : Equatable>(lhs: T?, rhs: T?) -> Bool
如果两个操作数都是 nil
或两者兼而有之,则给出 true
操作数非零且展开的操作数相等。
也NSArray
继承自NSObject
,符合Equatable
,
并将 NSObject
s 与 ==
进行比较使用 isEqual:
方法,即
在 NSArray
上实施为 isEqualToArray:
。
因此
array1 == array2
给出与
相同的结果array1.isEqualToArray(array2)
我喜欢@The Paramagnetic Croiss 的回答,但我仍然会缩短它一点,因为我知道我可以。
```
func isArrayEqualToArray(array1: NSArray?, array2: NSArray?) -> Bool {
if array1 == array2 {
return true;
}
if array1 != nil && array2 != nil {
return array1!.isEqualToArray(array2!);
}
return false;
}
```