如何使用swift在字典中添加多个参数[String,Dictionary]?

Posted

技术标签:

【中文标题】如何使用swift在字典中添加多个参数[String,Dictionary]?【英文标题】:How to add multiple paramaters[String,Dictionary] in a dictionary using swift? 【发布时间】:2015-07-01 07:50:55 【问题描述】:

我正在使用 Swift 构建 ios 应用程序。我使用的是 XCODE 6.3 版。 我想使用 JSON 将数据发布到服务器。为此,我创建了一个字典来执行以下操作。

//This is my dictionary right now
 var parameters = ["authenticity_token":name,"platform":"mobileApp", "email": userEmail, "password": userPassword,"remember_me":"1"]

 request.HTTPBody = NSJSONSerialization.dataWithJSONObject(parameters, options: nil, error: &err)

我想按如下所示的格式传递数据。

"authenticity_token":"token","platform":"mobileApp",
"user":"email":"email_id", "password":"123456",
 "remember_me":"1"

现在格式中的参数字典

[platform: mobileApp, authenticity_token: a1oj3olt5jn169LHn59ZbfbrBVUyov7sDVHlOl+2YzE=, email: su@gmail.com, remember_me: 1, password: samrat]

参数的顺序也改变了。 我想传递给我的字典。 或者有没有可能添加两个字典。

这是我将数据发布到服务器的代码。我对它是否正确还有另一个困惑。

 func postData()
  
     let name = defaults.stringForKey("secretKey")

    var parameters = ["authenticity_token":name,"platform":"mobileApp", "email": userEmail, "password": userPassword,"remember_me":"1"]

    println("Dic\(parameters)")
    let url = NSURL(string: "http://behance.moblearn.net/users/sign_in")
    var session = NSURLSession.sharedSession()
    let request = NSMutableURLRequest(URL: url!)
    request.HTTPMethod = "POST"

    var err: NSError?
    request.HTTPBody = NSJSONSerialization.dataWithJSONObject(parameters, options: nil, error: &err)

     let jsonStr = NSString(data: request.HTTPBody!, encoding: NSUTF8StringEncoding)
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")
    println("Post Method reached")

    var task = session.dataTaskWithRequest(request, completionHandler: data, response, error -> Void in

    println("Response: \(response)")
    var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
    println("Body: \(strData)")
    var err: NSError?
    var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as? NSDictionary

      if(err != nil) 
        println(err!.localizedDescription)
        let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
        println("Error could not parse JSON: '\(jsonStr)'")
    
    else 

        if let parseJSON = json 
            var success = parseJSON["success"] as? Int
            println("Succes: \(success)")
        
        else 
            let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
            println("Error could not parse JSON: \(jsonStr)")
        
    
)
task.resume()

我遇到了很大的麻烦。我是 swift 的初学者。我们将不胜感激。

【问题讨论】:

【参考方案1】:

这样做:

let innerDict = ["email": "email_id", "password": "123456", "remember_me": "1"]
let mainDict = ["authenticity_token": "token", "platform": "mobileApp", "user": innerDict]

【讨论】:

您如何看待它的工作原理——在一个字典中混合字典对象和字符串而不提供字典类型定义? @NikitaLeonov 编译器会将 mainDict 的类型推断为“NSDictionary”,它不携带类型信息。从此字典中提取对象将返回 AnyObject? @Aderstedt 每天我都在学习新东西。谢谢。显然就像你解释的那样——swiftstub.com/667283248/?v=gm收回我的-1。 ps 只要回答至少被编辑一次,就会这样做。 @Amit 不管怎样我真的很喜欢你的回答 @NikitaLeonov 应该可以,如果你知道/听说过“type infer”这个词,你就可以清楚地理解。

以上是关于如何使用swift在字典中添加多个参数[String,Dictionary]?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中使用包含多个值的查询参数构建 URL?

Swift - 具有实现通用协议的值的 Typealias 字典

如何在 Swift 中将数组添加到我的 JSON 字典

如何在 Swift 中使用 Alamofire 将参数作为正文发送到 PUT 方法

如何在 swift 中使用嵌套字典发送 POST 请求

如何使用包含Swift中相同键的多个值的查询参数构建URL?