2016-09-05 38 views
-1

我檢查了屬性的拼寫錯誤,這絕對不是這種情況。我正在嘗試使用我在parseSongs()函數中聲明的屬性mySong在我的類中聲明的屬性在嘗試在函數內部使用時無法識別?

該函數不在類內部,而是在同一個文件中。並且該類的目標成員資格也與其他文件一樣設置爲項目名稱。

我很困惑爲什麼編譯器不能識別我的屬性在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

要使用置身其中一個類中聲明的屬性,您有如果你聲明它之外的類,那麼你可以在課外

+0

我看到的功能,訪問它遵循這一

SongsTableViewController().theProperty 

,但它不是一個類屬性它的實例屬性,所以我不應該能夠使用它,而無需通過點語法訪問它? – Alex

+0

正如你所說的它的一個實例屬性,所以直到我不知道其他方式。 :) – Sofeda

+0

我剛剛編輯的問題,幷包括它是哪個屬性。我從這個例子出來的書的作者,mySong = []'他沒有'SongsTableViewController()。mySong'? – Alex

相關問題