web-dev-qa-db-ja.com

swift 3.0 Swift 3の「Any」の「AnyHashable」タイプにアクセスするにはどうすればよいですか?

私はsqliteファイルを使用してauthorIdからdiaryEntriesTeacherを取得しています。変数authorIdis nilを出力すると、authorIdの次のオブジェクトが生成されます。コード:-

func applySelectQuery() {        
    checkDataBaseFile()
    objFMDB = FMDatabase(path: fullPathOfDB)
    objFMDB.open()
    objFMDB.beginTransaction()

    do {
        let results = try objFMDB.executeQuery("select * from diaryEntriesTeacher", values: nil)



        while results.next() {  
            let totalCount = results.resultDictionary
            let authorId = totalCount?["authorId"]! 
            print("authorId",authorId)
   }


    }
    catch {
        print(error.localizedDescription)
    }
    print(fullPathOfDB)
    self.objFMDB.commit()
    self.objFMDB.close()
}

出力 enter image description here

6

これは、[AnyHashable : Any]の辞書にアクセスする方法です。

var dict : Dictionary = Dictionary<AnyHashable,Any>()
dict["name"] = "sandeep"
let myName : String = dict["name"] as? String ?? ""

あなたの場合

let authorId = totalCount?["authorId"] as? String ?? ""
6

アクセスしようとしているプロパティを使用する前に、AnyHashableに変換する必要があります。

あなたの場合:

do {
        let results = try objFMDB.executeQuery("select * from diaryEntriesTeacher", values: nil)



        while results.next() {  
            let totalCount = results.resultDictionary
            let authorId = totalCount?[AnyHashable("authorId")]! 
            print("authorId",authorId)
   }
0

これはスウィフトです。強力なタイプと高速な列挙を使用します。 Dictionary<AnyHashable,Any>は辞書の汎用タイプであり、すべてのキーがStringのように見えるため、<String,Any>にキャストできます。

do
  if let results = try objFMDB.executeQuery("select * from diaryEntriesTeacher", values: nil) as? [[String:Any]]

      for item in results {
          let authorId = item["authorId"] as? String 
          let studentName = item["studentName"] as? String 
          print("authorId", authorId ?? "n/a") 
          print("studentName", studentName ?? "n/a")
      }
  }
....
0
vadian