目前我们正在为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
}
}
答案 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
}
}