用数据库数据填充数组并在 pickerView 上调用它
Populating array with database data and calling it on pickerView
我需要使用数据库中的数据填充数组。当我这样做时,我从我的 pickerView 函数中收到一条错误消息。之前,我将这个数组硬编码如下,现在我希望它来自数据库查询。
var recomendMedsTypes = ["Advil","Aleve", "Ibuprofen","Tylenol"]
我不确定我的阵列设计是否正确。该数组是根据下面的简单 class
函数填充的
class Medicine {
var dawa: String
init(dawa: String) {
self.dawa = dawa
}
}
我填充了这个 class 的一个实例,如下所示
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]
}
这里我收到错误消息“无法将 return 类型‘Any’ 的表达式转换为 return 类型‘String?’。如何设计数组和调用 return 查询数据?查询应该 return 药物列表。
为什么要声明方法的 return 类型 Array<Any>
,尽管您清楚地知道那是 Array< Medicine>
又名 [Medicine]
?
在 Swift 中声明类型尽可能具体。
func readMedName() -> [Medicine] {
顺便说一句,因为 medname
是在方法之外声明的,所以 return 值是多余的
func readMedName() {
...
// return medname
}
这修复了错误,但你会得到另一个。在你的情况下,你必须 return 来自 titleForRow
的字符串 dawa
属性
return recomendMedsTypes[row].dawa
请不要根据 描述 字符串来创建字符串。没意义
medname.append(Medicine(dawa: drugname))
最后很可能您不需要 class,一个结构就足够了,您可以免费获得初始化程序。如果 dawa
没有改变,即使声明为常数
struct Medicine {
let dawa: String
}
我需要使用数据库中的数据填充数组。当我这样做时,我从我的 pickerView 函数中收到一条错误消息。之前,我将这个数组硬编码如下,现在我希望它来自数据库查询。
var recomendMedsTypes = ["Advil","Aleve", "Ibuprofen","Tylenol"]
我不确定我的阵列设计是否正确。该数组是根据下面的简单 class
函数填充的class Medicine {
var dawa: String
init(dawa: String) {
self.dawa = dawa
}
}
我填充了这个 class 的一个实例,如下所示
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]
}
这里我收到错误消息“无法将 return 类型‘Any’ 的表达式转换为 return 类型‘String?’。如何设计数组和调用 return 查询数据?查询应该 return 药物列表。
为什么要声明方法的 return 类型 Array<Any>
,尽管您清楚地知道那是 Array< Medicine>
又名 [Medicine]
?
在 Swift 中声明类型尽可能具体。
func readMedName() -> [Medicine] {
顺便说一句,因为 medname
是在方法之外声明的,所以 return 值是多余的
func readMedName() {
...
// return medname
}
这修复了错误,但你会得到另一个。在你的情况下,你必须 return 来自 titleForRow
的字符串 dawa
属性
return recomendMedsTypes[row].dawa
请不要根据 描述 字符串来创建字符串。没意义
medname.append(Medicine(dawa: drugname))
最后很可能您不需要 class,一个结构就足够了,您可以免费获得初始化程序。如果 dawa
没有改变,即使声明为常数
struct Medicine {
let dawa: String
}