Я проверил наличие орфографии собственности, это определенно не так. Я пытаюсь использовать свойство mySong
, которое я объявил в своем классе внутри функции parseSongs()
.Свойство, объявленное в моем классе, не распознается при попытке использовать его внутри функции?
Эта функция не находится внутри класса, но она находится в том же файле. И целевое членство этого класса устанавливается как имя проекта, так же как и другие файлы.
Я очень смущен, почему компилятор не узнает имя моего имущества в parseSongs()
?
Я могу объявить свойство вне класса, но я должен использовать его, даже если он объявлен внутри класса.
import UIKit
class SongsTableViewController: UITableViewController {
//A property that is an array of type 'Song'
var mySong = [Song]()
private let cache = NSCache()
private func fetchMyData(){
let myUrl = NSURL(string: "http://itunes.apple.com/search?term=beatles&country=us")!
let mySession = NSURLSession.sharedSession()
//The work to be queued initiates
let myTask = mySession.dataTaskWithURL(myUrl){
//This closure right here is the Completion Handler
data, response, error in
if error != nil{
//Handle error
}else{
let myHttpResponse = response as! NSHTTPURLResponse
switch myHttpResponse.statusCode {
case 200..<300:
print("OK")
print("data: \(data)")
default: print("request failed: \(myHttpResponse.statusCode)")
}
}
}
myTask.resume()
}
}
func parseJson(myData data: NSData){
do{
let json: AnyObject? = try NSJSONSerialization.JSONObjectWithData(data, options: [])
if let unwrappedJson: AnyObject = json{
parseSongs(unwrappedJson)
}
}catch{
}
}
func parseSongs(json1: AnyObject){
mySong = []
//Optional Binding
if let array = json1["results"] as? [[String:AnyObject]]{
//For-In loop
for songDictionary in array{
if let title = songDictionary["trackName"] as? NSString{
if let artist = songDictionary["artistName"] as? NSString{
if let albumName = songDictionary ["collectionName"] as? NSString{
if let artWorkUrl = songDictionary["artWorkUrl100"] as? NSString {
let song = Song(artist: (artist as String), title: (title as String), albumName: (albumName as String), artWorkUrl: (artWorkUrl as String))
mySong.append(song)
}
}
}
}
}
dispatch_async(dispatch_get_main_queue()){
self.tableView.reloadData()
}
}
}
я вижу , но его свойство класса не является свойством экземпляра, поэтому я не должен использовать его без необходимости доступа к нему через точечный синтаксис? – Alex
Как вы говорите, это свойство экземпляра, так что я не знаю другого пути. :) – Sofeda
Я только что отредактировал вопрос и включил, какое это свойство. Автор книги, из которой я взял этот пример, сделал 'mySong = []' он не делал 'SongsTableViewController(). MySong'? – Alex