【问题标题】:How to return value in a void function in Swift 2.0? [duplicate]如何在 Swift 2.0 的 void 函数中返回值? [复制]
【发布时间】:2016-07-14 18:14:39
【问题描述】:
     func getJSON(a:String,i:Int) -> [String]{

    let upper = "http://api.themoviedb.org/3/search/movie?query="
    let restpart = "&api_key=5565bb94f87424577ef39f24d901ff06"
    let newurl = upper + a + restpart
    let url = NSURL(string: newurl)
    let request = NSURLRequest(URL: url!)
    var thetitle: String = "noerror"
    var desc: String = "noerror"
    var id: String = String(404)
    let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
    let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in

        if error == nil{
            let swiftyJSON = JSON(data: data!)
            thetitle = swiftyJSON["results"][0]["title"].stringValue
            desc = swiftyJSON["results"][0]["overview"].stringValue
            id = (swiftyJSON["results"][0]["id"].stringValue)

            //print(thetitle)
        }
        else{
            thetitle = "error"
            desc = "error"
            id = "0";
            print("there was an error")
        }
    }

    var newFriend = [thetitle,desc,id]
    print(thetitle)
    task.resume()
    return newFriend
}

我想返回 newFriend 数组,但该值似乎始终是默认值。我该如何解决这个问题?

我知道任务的返回类型是 void,这是否意味着我无法更改该块内的其他代码?

【问题讨论】:

  • 只搜索“从dataTaskWithRequest返回值”或“从异步请求返回值”。这个问题经常被问和回答。

标签: arrays swift return


【解决方案1】:

网络需要时间。运行代码不会。 session.dataTaskWithRequest异步的theTitledescid 被设置异步 - 很长之后 newFriend 被返回。你有看到?你不能让时间倒流。

【讨论】:

  • 所以您的意思是 newFriend 在更改任务之前返回?是不是应该按顺序进行。我应该如何解决这个问题?
  • 是的,我的意思是,不,它不应该“按顺序进行”,您不能“修复”它,因为没有任何问题。搜索“异步”。如果你想在 dataTaskWithRequest 函数之后做某事,你必须在 in dataTaskWithRequest 函数之后做。
猜你喜欢
  • 2015-11-14
  • 2023-03-09
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多