Swift 4:过滤数组

时间:2017-12-10 08:56:42

标签: arrays swift

我是swift的新手,目前正在练习

这里我有一个plist文件,有一个字典数组,每个字典有一个字符串,plist有3条记录,它看起来像这样

item 0:
kurdi: Googlee

item 1:
kurdi: Yahooe

item 2:
kurdi: Binge

这是一个plist的图像; Screenshot 11:52AM

好的,重点是,当用户搜索oo时,例如其中两条记录包含oo,例如g oo gle和yah oo,i想要返回一系列结果,

对于我使用的情况:

let path = Bundle.main.path(forResource:"hello", ofType: "plist")
let plistData = NSArray(contentsOfFile: path!)
let objCArray = NSMutableArray(array: plistData!)

 if let swiftArray = objCArray as NSArray as? [String] {

     let matchingTerms = swiftArray.filter({
      $0.range(of: "oo", options: .caseInsensitive) != nil // here
        })
        print(matchingTerms)

    }

但不幸的是,当我打印matchingTerms时,它返回nil .. 感谢

2 个答案:

答案 0 :(得分:3)

如果您是Swift的新手,请首先学习不要在Swift中使用require(yaml); lst <- yaml.load(paste(ss, collapse = "\n")); lst; #$Data #$Data[[1]] #$Data[[1]]$datadir #[1] "/data/2017-11-22" # # #$Data[[2]] #$Data[[2]]$Nusers #[1] 5292 # # # #$Parameters #$Parameters[[1]] #$Parameters[[1]]$outdir #[1] "/data/2017-11-22/out" # # #$Parameters[[2]] #$Parameters[[2]]$K #[1] 20 # # #$Parameters[[3]] #$Parameters[[3]]$IC #[1] 179 # # #$Parameters[[4]] #$Parameters[[4]]$ICgroups #$Parameters[[4]]$ICgroups[[1]] #$Parameters[[4]]$ICgroups[[1]]$`group 1` #[1] "1-1" # #$Parameters[[4]]$ICgroups[[1]]$ICeffects #[1] "1-5" # # #$Parameters[[4]]$ICgroups[[2]] #$Parameters[[4]]$ICgroups[[2]]$`group 2` #[1] "2-173" # #$Parameters[[4]]$ICgroups[[2]]$ICeffects #[1] "6-10" # # #$Parameters[[4]]$ICgroups[[3]] #$Parameters[[4]]$ICgroups[[3]]$`group 3` #[1] "175-179" # #$Parameters[[4]]$ICgroups[[3]]$ICeffects #[1] "11-15" 基础集合类型。 (类型舞蹈 NSMutable... - &gt; NSArray - &gt; NSMutableArray - &gt; NSArray非常糟糕。使用Swift本机类型。而不是Array使用NSArray(contentsOfFilePropertyListSerialization相关的URL API。

所有感叹号的目的都在于文件必须存在于包中,并且结构众所周知。

Bundle

答案 1 :(得分:1)

将swift数组转换为[[String:Any]]而不是[String]。在过滤器中,您需要检查键kurdi的值。试试这个。

if let swiftArray = objCArray as? [[String:Any]] {
    let matchingTerms = swiftArray.filter { (($0["kurdi"] as? String) ?? "").range(of: "oo", options: .caseInsensitive) != nil }
    print(matchingTerms)
}