2017-09-14 13 views
-1

APIコールを使用して、アプリケーションでユーザーをログに記録しました。私はAlamofireSwiftyJSONを使用しています。 APIコールがうまく機能し、私はこの1つのようJSONファイルを取得:UserDefaultでのユーザー情報を保存するためにAPI呼び出しのJSON応答でオブジェクトを作成できません。

{ 
    "code": 200, 
    "message": "OK", 
    "data": { 
     "user_id": 1, 
     "user_email": "test", 
     "user_username": "kk1", 
    } 
} 

を、私はこのJSON応答に私のUserオブジェクトを作成したいです。

func login(userEmail: String, userPassword: String, finished: @escaping(_ status:String,_ data: LFUser?)->()) { 

      if let value = response.result.value { 

      let dict = JSON(value) 
      let code = dict["code"].intValue 
      let message = dict["message"].stringValue 



      if let data = dict["data"].dictionary { 

       print(data) 
       let user = LFUser(dict: data as [String : AnyObject]) 
       print(user.user_email) 
       finished("Success", user) 

     } 
    } 

印刷(データ)うまく動作しますが、作成する問題がある。ここではモデルここ

class LFUser: NSObject { 

    var user_id: Int? 
    var user_email: String? 
    var user_username: String? 

    init(dict: [String: AnyObject]){ 
     super.init() 
     user_id = dict["user_id"] as? Int 
     user_email = dict["user_email"] as? String 
     user_username = dict["user_username"] as? String 
    } 
} 

は、APIの呼び出しとobjectisが作成したログイン機能の一部ですオブジェクトとprint(user.user_email)はnilを表示します。

+0

が、そのために、このリンクのようなものhttps://stackoverflow.com/questions/2315948/how-to-store-custom-objects-in-nsuserdefaults –

+0

TYを行いますが、おそらくオブジェクトを正しく作成できないため、私の問題は解決しません。 –

+0

それは次のステップかもしれません –

答えて

0

これを確認してください:

if let data = dict["data"].dictionary { 
    let user = LFUser(dict: data) 
    print(user.user_email) 
    finished("Success", user) 
} 


class LFUser: NSObject { 

    var user_id: Int? 
    var user_email: String? 
    var user_username: String? 

    init(dict: [String : SwiftyJSON.JSON]){ 
     super.init() 
     user_id = dict["user_id"]?.intValue 
     user_email = dict["user_email"]?.stringValue 
     user_username = dict["user_username"]?.stringValue 
    } 
} 
+0

モデル内の[String:Any]が原因です。タイ –

0

私はスウィフト4のCodable代わりのために行くだろう:

struct User: Codable { 
    let user_id: Int 
    let user_email: String 
    let user_username: String 
} 

struct Response: Codable { 
    let code: Int 
    let message: String 
    let data: User 
} 

次にあなたがそのような着信データデコードすることができます、ユーザーのデフォルトに値を保存するために、そして、あなたを

let response = try JSONDecoder().decode(Response.self, from: jsonData) 

JSONEncoderまたはPropertyListEncoderを使用して値をDataにエンコードすることができます。

+0

興味深いことに、私はすぐにこれをチェックします。タイは非常に。 –

関連する問題