2016-09-05 2 views
-1

Я проверил наличие орфографии собственности, это определенно не так. Я пытаюсь использовать свойство 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() 
     } 
    } 
} 

ответ

0

Чтобы использовать свойство, вне которого объявленную внутри класса вы должны следовать этому

SongsTableViewController().theProperty 

Если объявить его вне класса, то вы можете получить доступ к нему в зависимости от внешнего класса

+0

я вижу , но его свойство класса не является свойством экземпляра, поэтому я не должен использовать его без необходимости доступа к нему через точечный синтаксис? – Alex

+0

Как вы говорите, это свойство экземпляра, так что я не знаю другого пути. :) – Sofeda

+0

Я только что отредактировал вопрос и включил, какое это свойство. Автор книги, из которой я взял этот пример, сделал 'mySong = []' он не делал 'SongsTableViewController(). MySong'? – Alex

Смежные вопросы