2015-11-08 3 views
2

В SQLite Swift documentation есть ссылка на получение результатов непосредственно. У меня много SQL-запросов, и я не хочу их реорганизовывать. Я бы скорее использовал их, поскольку они используют db.prepare, как показано ниже.SQLite Swift db.prepare Необязательный() в значениях операторов

Заявления с результатами могут быть пересмотрены.

let stmt = try db.prepare("SELECT id, email FROM users") 
for row in stmt { 
    print("id: \(row[0]), email: \(row[1])") 
    // id: Optional(1), email: Optional("[email protected]") 
} 

возвращение значение всегда имеет "факультативное()" вокруг них. Есть ли способ, по которому мы можем просто вернуть значения исходных строк без этого?

ответ

0

Тип-безопасный API позволяет объявлять выражения необязательных типов, которые при извлечении из оператора не завертываются.

Из README:

let users = Table("users") 
let id = Expression<Int64>("id") 
let name = Expression<String?>("name") 
let email = Expression<String>("email") 

try db.run(users.create { t in 
    t.column(id, primaryKey: true) 
    t.column(name) 
    t.column(email, unique: true) 
}) 
// CREATE TABLE "users" (
//  "id" INTEGER PRIMARY KEY NOT NULL, 
//  "name" TEXT, 
//  "email" TEXT NOT NULL UNIQUE 
//) 

let insert = users.insert(name <- "Alice", email <- "[email protected]") 
let rowid = try db.run(insert) 
// INSERT INTO "users" ("name", "email") VALUES ('Alice', '[email protected]') 

for user in db.prepare(users) { 
    println("id: \(user[id]), name: \(user[name]), email: \(user[email])") 
    // id: 1, name: Optional("Alice"), email: [email protected] 
} 

Обратите внимание, что оба id и email, которые не являются необязательными, возвращаются в качестве таковых.

+0

Извините, это не отвечает на действительно мой вопрос. Я не хочу, чтобы тип-безопасный, я хочу, чтобы иметь возможность подключать мой SQL напрямую. Я в порядке со всеми ответами выводятся как строки, которые по умолчанию для SQLite. – Mark80

+0

@ Mark80 Поскольку значения SQLite динамически возвращаются во время выполнения, нет возможности, чтобы версия, отличная от типов, знала, какой будет массив значений, кроме как необязательный. Тем не менее, вы можете использовать многочисленные дополнительные инструменты Swift для решения этой проблемы! – stephencelis

1

разворачивать значения, используя ! после переменной, как @stephencelis сказал:

let stmt = try db.prepare("SELECT id, email FROM users") 
for row in stmt { 
    print("id: \(row[0]!), email: \(row[1]!)") 
} 
+0

, если мое заявление было «SELECT * от пользователей». вы знаете, как получить columnName вместе со значением в цикле? –

0

Вы можете использовать https://github.com/groue/GRDB.swift. Он позволяет вам извлекать дополнительные или необязательные варианты, как вы пожелаете:

for row in Row.fetch(db, "SELECT id, email FROM users") { 
    let id: Int64 = row.value(atIndex: 0) 
    let email: String = row.value(atIndex: 1) 
    print(id, email) 
} 
+0

Почему downvote? –

Смежные вопросы