如何使用swift3将数据库存储到结构中?
问题描述:
我有一个函数来获取数据库并在MutableArray中返回它,现在我需要数据库在一个结构中。如何使用swift3将数据库存储到结构中?
我是否需要将MutableArray获取到结构中,还是应该直接将数据获取到结构中?
我不知道如何处理这个或如何将数据库存储到结构
我的代码:
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)
}
}
答
有很多怎么回事。这里有一些我的想法:
- 你的
getAllCrimesData
实际上得到crimesInfo
。 “数据”或“进入”,选择一个,保持一致 - 您的
getAllCrimesData
返回一组数据,并将所有类型的数据集中在一起,无需立即填写一些结构,而不用担心将数组解析为结构后来, - 有几乎从来没有一个理由使用
NSArray
,NSDictionary
,或者它们的可变版本雨燕。使用本机雨燕。 - 使用安全
guard let
或if let
检查应对resultSet
的可选性,而不是使用隐性解包可选 - 没有理由制作
CrimesInfo
一类 - 没有理由使从
NSObject
-
CrimesInfo
继承我们没有理由为一个空字符串预FIL的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
}