我们有两个可选的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且未包装的操作数相等。
true
nil
也NSArray继承NSObject符合Equatable,并使用将该方法与进行比较NSObject,==该isEqual:方法按isEqualToArray:on 实现NSArray。因此
NSArray
NSObject
Equatable
isEqual:
isEqualToArray:
array1 == array2
给出与以下结果相同的结果
array1.isEqualToArray(array2)