2017-04-05 85 views
0

我想從web api獲取藝術家信息,並創建一個新的藝術家類與返回的數據,但我無法將我的類屬性設置爲返回的數據。這裏是我的代碼不能分配給屬性.... setter在訪問swift 3

進口基金會 類曲目 {

static var trackService:TrackService? 

static func getArtistFromService()-> Artist 
{ 
    // construct the complete URL endpoint ot be called 

    //let searchURL = "https://\(siteURL)/?s=\(searchTerm)" 
    var searchedartist : Artist 

    let searchURL = "http://ws.audioscrobbler.com/2.0/?method=artist.gettoptracks&artist=drake&api_key=d932ba18a79b1739a4d9ba02c63bdb61&format=json" 

    // degugging - can test in browser if call is failing 
    print ("Web Service call = \(searchURL)") 

    // create the Web Service object that will make the call - initialiser 
    trackService = TrackService(searchURL) 

    // create an operation queue - to allow the web service to be called on a secondary thread... 
    let operationQ = OperationQueue() 
    //... will only allow one task at a time in queue... 
    operationQ.maxConcurrentOperationCount = 1 
    //...queue that web service object as the operation object to be run on this thread 
    operationQ.addOperation(trackService!) 
    //... wait for the operation to complete [Synchronous] - better to use delegation, for [Asynchronous] 
    operationQ.waitUntilAllOperationsAreFinished() 

    // clear the current list of movies 
    // get the raw JSON back from the completed service call [complete dataset] 
    let returnedJSON = trackService!.jsonFromResponse 

    let artist = returnedJSON?["artist"] as! String 
    let bio = returnedJSON?["bio"] as! String 

      searchedartist.name = artist 
     searchedartist.bio = bio 


    // return the main list of Movie objects to caller (UI) 

    return searchedartist 
} 


// for debugging - displays some details of the Movies currently in the main list... 

} //類聲明的末尾

級的藝術家 { 私人(套)變量名稱:字符串 私人(組)var bio:String

init?(_ n:String, _ b:String) 
{ 
    name = n 
    bio = b 

} 

convenience init(_ JSONObject:[String:String]) 
{ 
    let name = JSONObject["name"]! 
    let bio = JSONObject["bio"]! 

    self.init(name, bio)! 
} 

}

+0

什麼是TrackService?請稍微格式化代碼,以便正確顯示 – Ocunidee

回答

0

你的班級有私人二傳手。只需創建一個新的藝術家與返回的數據,而不是:

let artist = returnedJSON..... 
let bio = returnedJSON..... 

let searchedArtist = Artist(artist, bio) 
return searchedArtist 

或者只是使用你的便利init。一般來說,我更喜歡擁有不可改變的模型對象,所以我不會推薦讓您的製作者公開的選擇。

相關問題