2017-04-05 70 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。一般来说,我更喜欢拥有不可改变的模型对象,所以我不会推荐让您的制作者公开的选择。

相关问题