我有一个函数来获取数据库并在MutableArray中返回它,现在我需要数据库在一个结构中。
我是否需要将MutableArray放入struct中,还是应该将数据直接放入struct中?
我不知道如何处理这个或如何将数据库存储到struct
我的代码:
class CrimesInfo: NSObject {
var name: String = String()
var detail: String = String()
var time: String = String()
}
功能:
func getAllCrimesData() -> NSMutableArray {
sharedInstance.database!.open()
let resultSet: FMResultSet! = sharedInstance.database!.executeQuery("SELECT * FROM CrimeTable", withArgumentsIn: nil)
let marrCrimesInfo : NSMutableArray = NSMutableArray()
if (resultSet != nil) {
while resultSet.next() {
let crimesInfo : CrimesInfo = CrimesInfo()
crimesInfo.name = resultSet.string(forColumn: "Name")
crimesInfo.detail = resultSet.string(forColumn: "Detail")
crimesInfo.time = resultSet.string(forColumn: "Time")
marrCrimesInfo.add(crimesInfo)
}
}
答案 0 :(得分:2)
这里有很多事情要发生。以下是我的一些想法:
getAllCrimesData
实际获得crimesInfo
。 "数据"或者"进入,选择一个,保持一致。getAllCrimesData
会将各种数据汇总在一起。没有必要这样做,立即填写一些结构,而不是担心以后将数组解析成结构。NSArray
,NSDictionary
或其可变版本。使用原生的Swift类型。guard let
或if let
检查来处理resultSet
的可选性,而不是使用隐式展开的可选项。CrimesInfo
成为一个班级CrimesInfo
继承NSObject
name
/ detail
/ time
。我怀疑你想要一个名为""
的犯罪。这是我怎么写的:
struct CrimeInfo: NSObject {
let name: String
let details: String
let time: String
init(name: String, detail: String, time: String) {
self.name = name
self.details = details
self.time = time
}
init(fromResultSet: FMResultSet) {
self.init(
name: resultSet.string(forColumn: "Name"),
details: resultSet.string(forColumn: "Detail"),
time: resultSet.string(forColumn: "Time")
)
}
}
let CrimesIntoQuery = "SELECT * FROM CrimeTable"
func getAllCrimesInfo() -> [CrimeInfo] {
let database = sharedInstance.database!
database.open()
guard let resultSet = database.executeQuery(CrimesIntoQuery, withArgumentsIn: nil) {
else return []
}
var crimes = [CrimeInfo]()
while resultSet.next() {
crimes.add(CrimeInfo(fromResultSet: resultSet))
}
return crimes
}