【问题标题】:Problems with adding value to an array with array.append() in Swift在 Swift 中使用 array.append() 向数组添加值的问题
【发布时间】:2017-06-18 04:14:57
【问题描述】:

在我们正在为 iOS 编写一个 Swift 应用程序的那一刻,我们希望将我们的 JSON 网站(MySql 数据库)的数据获取到 TableViewCell 中。问题在于为单元格中的标签附加字符串的文本值。 Swift 可以将 JSON 值导入到 name 变量中,但我无法将其分配给单元格的文本数组。我没有语法错误,但是 data[0] 变量打印了某事。作为“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 
}
}

【问题讨论】:

  • 什么意思? data![0] 的值应该是 Name 中的值的字符串。
  • 尝试将数据分配为 var data = [String]()
  • 同样的问题,print("(data![0])" as String) 是“123”,而不是名称“Test”的附加值。这个结果从何而来?我只在单元格文本的数据值中添加了名称

标签: mysql arrays json swift append


【解决方案1】:

这是因为您的数组属性和数据回调块参数具有相同的名称“数据”。在您的代码中,您使用 print("(data![0])" as String) 而不是 print("(self.data![0])" as String) => 您必须添加 self。

然后你可以像这样优化你的代码(它是可选的:它就像一个代码审查;)) 尝试这样做 - 像这样将数组类型更改为字符串

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
            }

        }

【讨论】:

    【解决方案2】:

    当您附加到数据数组时,您使用 self.data 但随后您从作为参数的数据打印到内部函数。您可以从不同的数组添加和打印。

    【讨论】:

    • 更新了答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多