プロジェクトで Swift を使用しており、データベース処理にSQLite.swiftを使用しています。以下のように、データベースから最新のエントリを取得しようとしています。
func returnLatestEmailAddressFromEmailsTable() -> String{
let dbPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as String
let db = Database("\(dbPath)/db.sqlite3")
let emails = db["emails"]
let email = Expression<String>("email")
let time = Expression<Int>("time")
var returnEmail:String = ""
for res in emails.limit(1).order(time.desc) {
returnEmail = res[email]
println("from inside: \(returnEmail)")
}
return returnEmail
}
上記の関数から返された文字列を次のようにテストしようとしています。
println("from outside: \(returnLatestEmailAddressFromEmailsTable())")
関数の内側と外側の両方から値を出力する方法に注意してください。内部では、毎回動作します。「外部から:」の部分に苦労しています。
関数は正しいメールを返す場合もありますが、"" を返す場合もあります (おそらく、値が for ループに設定されていません)。
returnLatestEmailAddressFromEmailsTable() を呼び出すと常に最初に for ループが評価され、その後にのみ値が返されるように、「ブロッキング」機能を追加するにはどうすればよいですか?