Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
777 views
in Technique[技术] by (71.8m points)

cocoa - how to compare two optional NSArrays in Swift

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

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
}

I feel that it is a little too verbose. It should be doable in a more concise and readable way. Does anyone have a better solution?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...