【问题标题】:Set variables from closure从闭包中设置变量
【发布时间】:2016-02-14 15:55:08
【问题描述】:

我需要我的 responseString 的值,因为它包含我将发送到下一个 ViewController 的数据,我已经阅读了有关 completionHandlers 的内容,并且我还在某个地方发现我的 responseString 数据只能存在于变量中,是否有任何解决方法因为我从没想过这会成为一个大问题。

    func GenerateData
    var responseString = "baddata"

    let request = NSURL(string: postString)

    // NSLog("We are getting" + "this :" + postString )
    //request.HTTPMethod = "POST"
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithURL((request)!, completionHandler: { (data: NSData?, response:NSURLResponse?,
        error: NSError?) -> Void in
        //do something
        if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 {           // check for http errors
            print("statusCode should be 200, but is \(httpStatus.statusCode)")
            print("response = \(response)")
        }

         responseString = NSString(data: data! , encoding: NSUTF8StringEncoding) as! String
         print("responseString = \(responseString)")
     })
    task.resume()


    return responseString

     }

【问题讨论】:

    标签: swift closures nsurlsession


    【解决方案1】:

    像这样使用会话。

    将此添加到您的控制器顶部

    let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()
    

    寻找

    print("responseString = \(responseString)")
    

    稍后添加

    prefs.setObject(responseString, forKey: "responseString")
    prefs.synchronize() 
    

    现在您的 responseString 可以读取了。 打开另一个控制器视图控制器并执行此操作。

    并像这样使用

        let yourString:NSString = "\( prefs.valueForKey("responseString") as! String!)"
      self.responseText.text = yourString as String
    

    【讨论】:

    • 显然,它是一个异步函数,只有在我重新加载应用程序时才将 responseString 保存为首选项
    猜你喜欢
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 2017-08-03
    • 2018-01-24
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    相关资源
    最近更新 更多