2016-01-22 51 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 –