如何使用swift3将数据库存储到struct中?

时间:2016-11-13 00:20:57

标签: ios swift3

我有一个函数来获取数据库并在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)
        }
    }

1 个答案:

答案 0 :(得分:2)

这里有很多事情要发生。以下是我的一些想法:

  1. 您的getAllCrimesData实际获得crimesInfo。 "数据"或者"进入,选择一个,保持一致。
  2. 您的getAllCrimesData会将各种数据汇总在一起。没有必要这样做,立即填写一些结构,而不是担心以后将数组解析成结构。
  3. 几乎没有理由在Swift中使用NSArrayNSDictionary或其可变版本。使用原生的Swift类型。
  4. 使用安全guard letif let检查来处理resultSet的可选性,而不是使用隐式展开的可选项。
  5. 没有理由让CrimesInfo成为一个班级
  6. 没有理由让CrimesInfo继承NSObject
  7. 没有理由使用空字符串预先填充name / detail / time。我怀疑你想要一个名为""的犯罪。
  8. 这是我怎么写的:

    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
    }