为什么可选数组在Swift中不等同?

时间:2016-01-28 08:05:31

标签: ios arrays swift

使用Swift 2.1

  1. 为什么在其他可选类型的情况下,可选数组在Swift中不等同? (我假设Equatable没有针对这个特殊情况实施,但我不知道为什么)
  2. 如何最好地将Swift中的可选数组等同起来?

let a: [Int]? = nil
let b: [Int]? = nil

if a == b { // Error: Value of optional type '[Int]?' not unwrapped; did you mean to use '!' or '?'?
    print("equal")
}

if a? == b? { // Error: Value of optional type '[Int]?' not unwrapped; did you mean to use '!' or '?'?
    print("equal")
}

// There must be a better way
if let a1 = a, let b1 = b where a1 == b1 {
    print("equal")
} else if a == nil && b == nil {
    print("equal")
} else {
    print("not equal")
}
我假设有可能为可选数组实现`Equatable`;但是我在以下实现中遇到错误:
func ==<T : Equatable>(optLHS: [T]?, optRHS: [T]?) -> Bool {
    if optLHS == nil && optRHS == nil {
        return false
    }
    if let lhs = optLHS, let rhs = optRHS {
        return lhs == rhs
    }
    return false
}

let a: [Int]? = nil
let b: [Int]? = nil

if a == b { // Execution was interrupted, reason: EXC_BAD_ACCESS (code=2, address=0x...)
    print("equal")
}

等同于可选的非数组类型可以正常工作:

let c: Int? = nil
let d: Int? = nil

if c == d {
    print("equal") // Works as expected
}

请注意,我不是在谈论可选类型的数组,例如[Int?]。 要等同一组可选类型,请参见此处:Swift, Equatable protocol bug?

0 个答案:

没有答案