-1

我第一次在这里遇到与 SQLite.Swift 库有关的 Swift 相关问题。

我有一个用于 db.prepare 语句的 for 循环,但是在尝试将数组值分配给 UILabel 时我被卡住了。

    // Prepare query to retrieve the message
var _phraseMessage:String = ""    
let _stmt = _db.prepare("SELECT id, message FROM messages WHERE language = 'EN' AND category = 1 and username = 'user' LIMIT 1")

            for row in _stmt {

                println("id: \(row[0]), message: \(row[1])")

                self._phraseMessageLabel = row[1] --> i get an error here **"'Binding' is not convertible to UILabel"**


            }

如何将值分配row[1]给我的 UILabel?如果可能的话,甚至更好地使用 String 变量。

提前致谢!

免责声明:这是我第一次尝试 Swift + 第三方库

4

2 回答 2

1

您正在尝试将UILabel属性本身设置为您的值 - 您希望将标签text的属性设置为您的值:

self._phraseMessageLabel.text = row[1] as! String

如果要将值分配给变量:

var message = row[1] as! String

需要注意的一点是,对于这两种方法,您的标签文本或变量最终只会设置为返回的最后一行的值,即for循环最后处理的那一行。

于 2015-04-09T21:12:50.760 回答
0

除了上面的 Undo 修复之外,我还想提供一些其他的解决方案。

  1. 尝试使用Database.scalarorStatement.scalar如果您只使用单个值,如上面的示例所示。

    // make sure to remove "id" from your SELECT statement
    self._phraseMessageLabel.text = _stmt.scalar() as! String
    

    注意:确保id从您的 SELECT 语句中删除;scalar仅返回第一行的第一列。

  2. 使用Statement.row光标。

    _stmt.step()
    self._phraseMessageLabel.text = _stmt.row[1]
    
于 2015-04-09T22:11:32.280 回答