2016-07-14 14 views
-2
 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配列を返したいと思いますが、値は常にデフォルト値であるようです。これをどうすれば解決できますか?Swift 2.0のvoid関数で値を返す方法は?

私はタスクの戻り値の型が無効であることを認識しています。つまり、そのブロック内の他のコードを変更できないということですか?

+1

"dataTaskWithRequestからの戻り値"または "非同期要求からの戻り値"を検索するだけです。これは尋ねられ、頻繁に答えられています。 –

答えて

0

ネットワークに時間がかかります。実行中のコードは実行されません。 session.dataTaskWithRequestは、、非同期です。 theTitleおよびdescおよびidは、と非同期に - と設定され、の後にnewFriendが返されます。見える?時間を逆にすることはできません。

+0

あなたは新しい友達がタスクに変更するより先に返されることを意味するのですか?それが順番に進むとは思わないのですか?そして私はこれをどのように修正すべきですか? –

+0

はい、私はそれが「順番に進む」ことになっているわけではなく、何も間違っていないので「修正」できないということを意味します。 "非同期"で検索してください。 'dataTaskWithRequest'関数の後で何かしたいのであれば' dataTaskWithRequest'関数でそれを行う必要があります。 – matt

関連する問題