如何与可选数组进行比较?

时间:2016-07-11 15:22:14

标签: swift syntax

我想要一个比较[String]的函数?用[String]?哪里,两者或两者都不是。如果两者都是nil,则函数返回true

是否存在我可以避免检查值等于nil的符号?

此:

func compare_colours(a1:[String]?, a2:[String]?) -> Bool {
    return a1 == a2
}

在Swift中无效,因为我需要先添加!

return a1! == a2!

3 个答案:

答案 0 :(得分:0)

if let a1Unwrapped = a1{
    if let a2Unwrapped = a2{
         return a1Unwrapped == a2Unwrapped
    }
}
if (a1 == nil && a2 == nil){
    return true
}
return false

答案 1 :(得分:0)

我更喜欢使用guard而非if语句,因此我可以避免使用pyramid of doom

func compare_colours(a1:[String]?, a2:[String]?) -> Bool {
  if a1 == nil && a2 == nil      { return true  }
  guard let unwrapped1 = a1 else { return false }
  guard let unwrapped2 = a2 else { return false }
  return unwrapped1 == unwrapped2
}

您无需检查是否为零。相反,您可以检查可选枚举是否为.None:

switch (a1, a2) {
case (.None, .None): print("Both unset Optional")
}

无论哪种方式,你必须做同样的基本事情,检查nil / .None。有关其工作原理的详细信息,请阅读以下答案:https://stackoverflow.com/a/33209762/887210

答案 2 :(得分:-1)

或者只使用可选的空格,您可以匹配所有场景。

func compare_colours(a1:[String]?, a2:[String]?) -> Bool {
    return a1 ?? [""] == a2 ?? [""]
}