【问题标题】:Populating array with database data and calling it on pickerView用数据库数据填充数组并在pickerView上调用它
【发布时间】:2019-12-09 03:51:26
【问题描述】:

我需要使用数据库中的数据填充数组。当我这样做时,我从我的 pickerView 函数中收到一条错误消息。之前,我将这个数组硬编码如下,现在我希望它来自数据库查询。

var recomendMedsTypes = ["Advil","Aleve", "Ibuprofen","Tylenol"]

我不确定我的阵列设计是否正确。该数组由基于下面简单类的函数填充

class Medicine {
    var dawa: String

    init(dawa: String) {
        self.dawa = dawa
    }
}

我如下填充这个类的一个实例

var medname = [Medicine]()

这是填充数组的函数

func readMedName() -> Array<Any>{

       //get data from this query
       let queryString = "SELECT drugName FROM otc"

       //statement pointer
       var stmt2:OpaquePointer?

       //preparing the query
       if sqlite3_prepare(db, queryString, -1, &stmt2, nil) != SQLITE_OK {
           let errmsg = String(cString: sqlite3_errmsg(db)!)
           print("error preparing read: \(errmsg)")
           //return errmsg
       }

       //go through all the records
      while(sqlite3_step(stmt2) == SQLITE_ROW){
           let drugname = String(cString: sqlite3_column_text(stmt2,0))

        // populate array
       medname.append(Medicine(dawa: String(describing: drugname)))

       }
       return medname
   }

这是我从查询中填充数组的尝试

var recomendMedsTypes = readMedName()

在pickerView中

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

return recomendMedsTypes[row]
}

在这里我收到错误“无法将‘Any’类型的返回表达式转换为‘String’类型的返回表达式?’。如何设计数组和返回查询数据的调用?查询应返回药物列表。

【问题讨论】:

    标签: arrays swift pickerview


    【解决方案1】:

    你为什么要声明方法Array&lt;Any&gt;的返回类型虽然你清楚地知道那是Array&lt; Medicine&gt;又名[Medicine]

    在 Swift 中尽可能具体地声明类型。

    func readMedName() -> [Medicine] {
    

    顺便说一句,medname 在方法之外声明,返回值是多余的

    func readMedName() {
    ...
    // return medname
    }
    

    这修复了错误,但您会得到另一个错误。在您的情况下,您必须从 titleForRow 返回一个字符串 dawa 属性

    return recomendMedsTypes[row].dawa
    

    请不要从描述字符串创建字符串。没意义

    medname.append(Medicine(dawa: drugname))
    

    最后很可能你不需要一个类,一个结构就足够了,你可以免费获得初始化程序。如果dawa 没有改变,则将其声明为常量

    struct Medicine {
        let dawa: String
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 2015-01-27
      相关资源
      最近更新 更多