簡體   English   中英

根據Swift中的空值過濾數組

[英]Filter an array based on empty value in Swift

我正在嘗試過濾一系列字典。 以下代碼是我正在尋找的場景的示例

let names = [ 
    [ "firstName":"Chris","middleName":"Alex"],
    ["firstName":"Matt","middleName":""],
    ["firstName":"John","middleName":"Luke"],
    ["firstName":"Mary","middleName":"John"],
]

最終結果應該是一個中間名稱的數組。

這樣做了

names.filter {
  if let middleName = $0["middleName"] {
    return !middleName.isEmpty
  }
  return false
}

您還可以使用nil-coalescing運算符來非常簡潔地表達它:

let noMiddleName = names.filter { !($0["middleName"] ?? "").isEmpty }

這將使用空字符串替換缺少的中間名,因此您可以使用.isEmpty處理(如果要獲取具有中間名稱的那些則可以取消)。

您還可以使用可選鏈接和nil-coalescing運算符以另一種方式表達它:

let noMiddleName = names.filter { !($0["middleName"]?.isEmpty ?? true) }

$0["middleName"]?.isEmpty如果值不是nil則調用isEmpty ,但返回一個可選項(因為它可能是nil )。 然后你用?? 替換nil true

略短:

let result = names.filter { $0["middleName"]?.isEmpty == false }

這處理所有三種可能的情況:

  • 如果中間名存在且不是空字符串,則$0["middleName"]?.isEmpty求值為false ,謂詞返回true
  • 如果中間名存在且空字符串,則$0["middleName"]?.isEmpty計算結果為true ,謂詞返回false
  • 如果中間名不存在 ,則$0["middleName"]?.isEmpty求值為nil ,謂詞返回false (因為nil != false )。

這也很好

names.filter {

if let middleName = $0["middleName"] {
 return middleName != ""
}
return false
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM