2016-11-13 18 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あなたのgetAllCrimesDataは、すべての種類のデータの配列をまとめて返します。構造体への配列の解析を心配するのではなく、すぐにいくつかの構造体を記入する必要はありません。後で。
  3. は、スウィフトにNSArrayNSDictionary、またはその可変バージョンを使用する理由がほとんどないません。ネイティブスウィフトタイプを使用してください。guard letまたはif letresultSetの選択性に対処するためにチェックするのではなく、使用して安全な
  4. 使用暗黙のアンラップオプション。
  5. 作成する理由はありませんCrimesInfoクラス
  6. 空の文字列でname/detail/time事前FILする理由はありませんNSObject
  7. からCrimesInfo継承を作成する理由はありません。私はあなたが""という犯罪をしたいとは思わない。

は、ここで私はこれを記述します方法は次のとおりです。

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 
} 
関連する問題