how to compare two optional NSArrays in Swift

后端 未结 4 1246
野的像风
野的像风 2020-12-18 17:49

Let\'s have two optional NSArrays. The goal is to check, if they are equal. My solution is

func isArrayEqualToArray(array1:NSArray?, array2:NSArray?) -> B         


        
相关标签:
4条回答
  • 2020-12-18 18:04

    Yes, indeed, you don't need to overcomplicate things:

    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;
    }
    
    0 讨论(0)
  • 2020-12-18 18:04

    I liked @The Paramagnetic Croiss answer but I'm still going to shorten it a bit because I see that I can.

    ```

    func isArrayEqualToArray(array1: NSArray?, array2: NSArray?) -> Bool {
        if array1 == array2 {
            return true;
        }
        if array1 != nil && array2 != nil {
            return array1!.isEqualToArray(array2!);
        }
        return false;
    }
    

    ```

    0 讨论(0)
  • 2020-12-18 18:05

    Using a switch statement may be clearer:

    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
        }
    }
    
    0 讨论(0)
  • 2020-12-18 18:10

    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 NSObjects with == uses the isEqual: method, which is implemented as isEqualToArray: on NSArray. Therefore

    array1 == array2
    

    gives the same result as

    array1.isEqualToArray(array2)
    
    0 讨论(0)
提交回复
热议问题