在Swift中使用array.append()向数组添加值的问题

时间:2017-02-01 12:05:41

标签: mysql arrays json swift append

目前我们正在为iOS编写Swift App,我们希望将JSON网站(MySql数据库)的数据导入TableViewCell。问题是通过在单元格中附加标签的字符串的文本值。 Swift可以将JSON值导入名称变量,但我无法将其分配给单元格的文本数组。我没有语法错误,但数据[0]变量打印...... as" 123"。为什么是123?测试值是"测试"。我现在不通过将值附加到数组来解决问题,结果是123之后的结果。请帮忙。

这是源代码:

class listViewViewController: UIViewController, UITableViewDataSource, UITableViewDelegate  {

var data:[String?] = []
@IBOutlet weak var tableView: UITableView!

 override func viewDidLoad() {
    super.viewDidLoad()

    let myUrl = URL(string: "");//Empty link for this question
    var request = URLRequest(url:myUrl!)
    request.httpMethod = "POST"
    let postString = "lid=1";

    request.httpBody = postString.data(using: String.Encoding.utf8);
    let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in

        if error != nil {
            print("error=\(error)")
            return
        }
        print("response = \(response!)")

        do {
            let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary

            if let parseJSON = json {

                let Name = parseJSON["Name"] as? String
                print("\(Name)")//Test
                self.data.append(Name!)
                print("\(data![0])" as String)//123
            }
        } catch {
            print(error)
        }
    }
    task.resume()
}

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return data.count
}

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! listViewTableViewCell

    print("\(data[indexPath.row])")
    let dataCell = data[indexPath.row]        
    cell.listViewCell.text = dataCell
    return cell 
}
}

2 个答案:

答案 0 :(得分:0)

当您附加到数据数组时,使用self.data,然后从数据打印,该数据是内部函数的参数。您可以从不同的阵列添加和打印。

答案 1 :(得分:0)

这是因为您的数组属性和数据回调块参数具有相同的名称“data”。在你的代码中你用户打印(“(data![0])”作为字符串)而不是print(“(self.data![0])”as String)=>你必须添加自我。

那么你可以像这样优化你的代码(它是可选的:它就像代码审查一样;)) 试着这样做 - 将数组类型更改为String

var data = [String]()

- webService回调改变你的代码:

 if let parseJSON = json {

            if let Name = parseJSON["Name"] as? String{
                print("\(Name)")
                self.data.append(Name)
                print("\(self.data.last)")//123
            }

        }