让我们有两个可选的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
}
我觉得它有点过于冗长。它应该以更简洁和可读的方式实现。有没有人有更好的解决方案?
答案 0 :(得分:5)
这很简单:
func isArrayEqualToArray(array1: NSArray?, array2: NSArray?) -> Bool {
return array1 == array2
}
完全符合您的要求。
为什么会有效?此处==
是比较选项的运算符
func ==<T : Equatable>(lhs: T?, rhs: T?) -> Bool
如果两个操作数均为true
,则为nil
操作数是非零的,未打开的操作数是相等的。
同样NSArray
继承自符合NSObject
的{{1}},
并将Equatable
与NSObject
进行比较时使用的是==
方法
在isEqual:
上以isEqualToArray:
实施。
因此
NSArray
给出与
相同的结果array1 == array2
答案 1 :(得分:1)
是的,确实,你不需要过度复杂化:
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;
}
答案 2 :(得分:0)
使用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
}
}
答案 3 :(得分:0)
我喜欢@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;
}
```