-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()
}
}
}
我看到的功能,訪問它遵循這一
,但它不是一個類屬性它的實例屬性,所以我不應該能夠使用它,而無需通過點語法訪問它? – Alex
正如你所說的它的一個實例屬性,所以直到我不知道其他方式。 :) – Sofeda
我剛剛編輯的問題,幷包括它是哪個屬性。我從這個例子出來的書的作者,mySong = []'他沒有'SongsTableViewController()。mySong'? – Alex