【发布时间】:2015-10-16 06:01:52
【问题描述】:
我一直在使用 NSDictionary 在 Swift(版本 7 beta 4)中处理一系列字典。该数组是包含不同数据类型的 fmdb 结果的集合。我想最终得到一系列本机 swift 字典,以便使用 swift 集合类型的过滤器功能。以下是我正在使用创建数组的查询函数的 sn-p:
class func query(sql:String) -> [NSDictionary] {
let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask, true)
let docsDir = dirPaths[0] as String
let databasePath:String = docsDir.stringByAppendingPathComponent("myDB.db")
let db = FMDatabase(path: databasePath as String)
var resultsArray:[NSDictionary] = []
if db.open() {
let results:FMResultSet? = db.executeQuery(sql, withArgumentsInArray: nil)
while (results?.next() == true) {
resultsArray.append(results!.resultDictionary()) //appending query result
}
db.close()
} else {
print("Error: \(db.lastErrorMessage())")
}
return resultsArray
}
我尝试使用 AnyObject,例如:
class func query(sql:String) -> [[String:AnyObject]] {
let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask, true)
let docsDir = dirPaths[0] as String
let databasePath:String = docsDir.stringByAppendingPathComponent("Kerbal.db")
let db = FMDatabase(path: databasePath as String)
var resultsArray:[[String:AnyObject]] = []
if db.open() {
let results:FMResultSet? = db.executeQuery(sql, withArgumentsInArray: nil)
while (results?.next() == true) {
resultsArray.append(results!.resultDictionary() as! Dictionary<String,AnyObject>)
}
db.close()
} else {
print("Error: \(db.lastErrorMessage())")
}
return resultsArray
}
但是我不能将resultsArray.filter({$0["fieldName"] == "part"}) 之类的过滤器与AnyObject 一起使用。
我的问题:即使字典有不同的类型,是否可以使用本机 Swift 字典创建这个数组?可以在集合类型上使用新的协议扩展来解决这个问题吗?
欢迎提出任何建议。
【问题讨论】:
-
你知道字典中有哪些类型吗?文档(在 obj-c 中)没有说明这一点。
-
我知道每个字典中的三个值将是字符串,而其他值是双精度。
标签: ios swift dictionary swift2