Как я могу заполнить массив с помощью SQL-запроса результатов в Swift? - PullRequest
0 голосов
/ 30 мая 2019

Я новичок в написании программ с Xcode. Я успешно выполняю соединение MS SQL, но как мне заполнить переменную Array определенным результатом запроса? Я хочу показать строковые значения, которые я заполняю, в переменную Array в TableView. Я подошел к своему коду:

import UIKit
class SecondViewController: UIViewController,SQLClientDelegate {
    func error(_ error: String!, code: Int32, severity: Int32) {
        print("\(error!) \(code) \(severity)")
}
    @IBOutlet weak var userListTableView: UITableView!
    var client:SQLClient!
    var uNames: [String] = []
    override func viewDidLoad() {
        super.viewDidLoad()
        client = SQLClient.sharedInstance()!
//Initially we call the DB data in internal memory.
        strIP = UserDefaults.standard.string(forKey: "DBServerIP")!
        strDBName = UserDefaults.standard.string(forKey: "DBName")!
        strUName = UserDefaults.standard.string(forKey: "DBUser")!
        strPass = UserDefaults.standard.string(forKey: "DBPass")!
}
    @IBAction func btnUserAct(_ sender: Any) {
        client = SQLClient.sharedInstance()!
        client.delegate = self
        client.connect(strIP,username: strUName,password: strPass,database: strDBName){ success in
            if success {
                self.client.execute("Select UserId from Usertbl order by Id") {
                results in
                    for table in results as! [[[String:AnyObject]]] {
                        for row in table {
                            for (columnName, value) in row {
                                print(value)
//Here, UserId data appears successfully in the Xcode Debug area. So connection successful.
//How can I populate these values ​​to the uNames Array variable?
}}}
                    self.client.disconnect()
}}}}}
extension SecondViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return uNames.count
}
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = uNames[indexPath.row]
        return cell
}}

Мне нужна твоя помощь.

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Кажется, что SQLClien возвращает классы Objective-C, такие как NSArray, NSNumber и т. Д. Следовательно, value имеет тип AnyObject. Предполагая, что базовый столбец имеет тип int, а затем value имеет тип NSNumber Я думаю, вам потребуется преобразовать его в строку в два этапа

if let intVal = value as? Int {
    self.uNames.append(String(intVal)
}
0 голосов
/ 30 мая 2019

Это тривиально, если ваш вопрос - Как добавить значение в массив, вы можете использовать append метод массива в Swift. value имеет тип AnyObject, поэтому необходимо преобразовать в String. Попробуйте сделать это:

for (columnName, value) in row {
         print(value)

         // First option
         let newVal = value as? String ?? ""
         self.uNames.append(newVal)

         // Second option
         // self.uNames.append(value as! String)


        //Here, UserId data appears successfully in the Xcode Debug area. So connection successful.
        //How can I populate these values ​​to the uNames Array variable?
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...