我是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
..
感谢
答案 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(contentsOfFile
和PropertyListSerialization
相关的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)
}