如何在 Swift 中比较两个可选的 NSArray
Posted
技术标签:
【中文标题】如何在 Swift 中比较两个可选的 NSArray【英文标题】:how to compare two optional NSArrays in Swift 【发布时间】:2015-02-03 19:34:13 【问题描述】:让我们有两个可选的 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
我觉得有点太啰嗦了。它应该以更简洁和可读的方式可行。谁有更好的解决方案?
【问题讨论】:
【参考方案1】:很简单:
func isArrayEqualToArray(array1: NSArray?, array2: NSArray?) -> Bool
return array1 == array2
完全按照你的意愿去做。
为什么会起作用?这里==
是比较可选的操作符
func ==<T : Equatable>(lhs: T?, rhs: T?) -> Bool
如果两个操作数都是nil
,或者两者都是true
操作数非零且展开的操作数相等。
同样NSArray
继承自NSObject
符合Equatable
,
并将NSObject
s 与==
进行比较使用isEqual:
方法,即
在NSArray
上实现为isEqualToArray:
。
因此
array1 == array2
给出与
相同的结果array1.isEqualToArray(array2)
【讨论】:
... 这比在 Objective-C 中要好得多,因为这种事情很痛苦。【参考方案2】:是的,确实,你不需要把事情复杂化:
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;
【讨论】:
【参考方案3】:使用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
【讨论】:
【参考方案4】:我喜欢@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;
```
【讨论】:
以上是关于如何在 Swift 中比较两个可选的 NSArray的主要内容,如果未能解决你的问题,请参考以下文章
Swift:如果变量 a 是非可选的,那么为啥变量 b 是可选的? [复制]