【问题标题】:How to take a function result and turn it into a key value pair array如何获取函数结果并将其转换为键值对数组
【发布时间】:2020-02-26 16:07:14
【问题描述】:

我对 Swift 很陌生,但我有一个函数可以返回数字的键值对结果

func dataPostRequest(_ url:String,_ paramString:String)
{
    let url:NSURL = NSURL(string: url)!
    let session = URLSession.shared

    let request = NSMutableURLRequest(url: url as URL)
    request.httpMethod = "POST"

    request.httpBody = paramString.data(using: String.Encoding.utf8)

    let task = session.dataTask(with: request as URLRequest) {
        (
        data, response, error) in

        guard let _:NSData = data as NSData?, let _:URLResponse = response, error == nil else {
            print("error")
            return
        }

        if let dataString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
        {
            print(dataString)


        }
    }

    task.resume()

}

我可以这样调用函数:

dataPostRequest("https://myserver.com/","user_email=emailtest.com")

这可以正常工作,但我现在想使用我提取的数据并将其显示在表视图中。我的 tableView 设置正确,但我想知道如何使用我的函数并将其转换为我可以使用的键值对数组或字典。我尝试创建一个空字典并将我的函数调用设置为它,但出现错误:

var emptyDictionary = [Int: Int]()

emptyDictionary = dataPostRequest("https://myserver.com/","user_email=emailtest.com")

无论我尝试什么样的变化,我都会不断得到:

Cannot assign value of type '()' to type '[Int : Int]' 

任何指导将不胜感激。

【问题讨论】:

标签: arrays swift dictionary


【解决方案1】:

dataPostRequest 没有返回值(又名())。您可以在完成处理程序中解码接收到的数据并将其分配给字典。请参阅下面的评论行。

如果您需要在另一个函数中继续,您必须添加一个完成处理程序,描述为here

如果有本地对应物,基本上不要在 Swift 中使用 NS... 类。并且不要注释编译器可以推断的类型。

原生 Swift 版本是

func dataPostRequest(with url:String, paramString : String)
{
    let url = URL(string: url)!
    let session = URLSession.shared

    var request = URLRequest(url: url)
    request.httpMethod = "POST"

    request.httpBody = paramString.data(using: .utf8)

    let task = session.dataTask(with: request) { data, response, error in

        if let error = error {
            print(error)
            return
        }

        let dataString = String(data: data!, encoding: .utf8)!
        print(dataString)

        // here decode the data to the desired type and assign it to emptyDictionary
    }

    task.resume()
}

【讨论】:

  • 感谢您的帮助
猜你喜欢
  • 2019-06-09
  • 1970-01-01
  • 2019-01-14
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多