2016-11-13 68 views
0

我有一個函數來獲取數據庫並在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) 
     } 
    } 

回答

2

有很多怎麼回事。這裏有一些我的想法:

  1. 你的getAllCrimesData實際上得到crimesInfo。 「數據」或「進入」,選擇一個,保持一致
  2. 您的getAllCrimesData返回一組數據,並將所有類型的數據集中在一起,無需立即填寫一些結構,而不用擔心將數組解析爲結構後來,
  3. 有幾乎從來沒有一個理由使用NSArrayNSDictionary,或者它們的可變版本雨燕。使用本機雨燕。
  4. 使用安全guard letif let檢查應對resultSet的可選性,而不是使用隱性解包可選
  5. 沒有理由製作CrimesInfo一類
  6. 沒有理由使從NSObject
  7. 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 
} 
相關問題