2016-01-22 19 views
0

我的問題是:斯威夫特2 JSON解析,但不追加全球價值陣列

class BackVC: UITableViewController { 

    var strArr = Array<String>() 

這個數值與viewDidLoad中初始化()函數

override func viewDidLoad() { 

    super.viewDidLoad() 

    strArr = Array<String>() 

,寫這個JSON解析碼的後面

let generalUrl = NSURL(string: "my json address") 
    let path = NSURLSession.sharedSession().dataTaskWithURL(generalUrl!) { (data, response, error) -> Void in 
     if let dataPath = data { 
     do { 
      let jsonResult = try NSJSONSerialization.JSONObjectWithData(dataPath, options: NSJSONReadingOptions.MutableContainers) 

      if let catArr = jsonResult["categories"] as? NSArray { 
      for c in catArr { 
       self.strArr?.append(c as! String) 
      } 
      } 
     } catch { 
      print("json data read error") 
     } 
     } 
    } 
    path.resume() 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! ImageCell 

    print("strArr") or print("\(strArr)") is nil 
    } 

有什麼不對?

+0

此代碼無法編譯,因爲此行中有問號'self.strArr?.append(c as!因爲'strArr'被聲明爲非可選的。 – vadian

回答

2

傾向於像這樣快速定義arrays[String]

// define array 
var strArr = [String]() 

// add item to array 
for c in catArr { 
    self.strArr.append(c as! String) 
} 

// get item 
let text = self.strArray[indexPath.row] 
print("next:\(text)") 
+0

對不起這個代碼 –

+0

'[String]()'和'Array ()'是絕對等效的。 – vadian

0

到前面的答案類似...

寧可初始化數組迅疾這樣

var strArr = [String]() 

或長手更明確的版本

`var strArr: Array<String> = [String]()` 

alternativley到以上回路

// add item to array 
for i in 0...catArr.count-1 { 
self.strArr[i].append(c as! String) 
} 
+0

對不起,此內容沒有任何影響。 return nil –