首页 > 解决方案 > 如何在 SQLite 中正确定义自定义函数的闭包

问题描述

我刚刚升级到适用于 macOS 的 XCode (10.3) 和 SQLite.swift 的最新稳定版本,现在我遇到了一个构建问题,可能很明显,我似乎无法修复。

func strings(for symbols: [Character]) -> [String] {
    let timing = Date()
    if let stringdom = stringdom {
        let strings = stringdom.strings(for: symbols)
        os_log("LEXICON...Strings()→Cache: %.2f seconds", log: LexiconLog, type: .debug, Date().timeIntervalSince(timing))
        return strings
    } else if let connection = connection {
        do {
            let isSubsetOf: (Expression<String>, Expression<String>) -> Expression<Bool> = (
                try connection.createFunction("isSubsetOf", deterministic: true) { string, symbols in
                    return string.isSubsetOf(symbols)
                }
            )
            let strings = try connection.prepare(
                SQLiteDatabaseLexicon.tableWords.select(SQLiteDatabaseLexicon.tableWordsColumnString).filter(
                    isSubsetOf(SQLiteDatabaseLexicon.tableWordsColumnString, Expression<String>(String(symbols)))
                )
            ).map { $0[SQLiteDatabaseLexicon.tableWordsColumnString] }
            os_log("LEXICON...Strings()→Database: %.2f seconds", log: LexiconLog, type: .debug, Date().timeIntervalSince(timing))
            return strings
        } catch {
            os_log("FAULT...SQLite database content could not be accessed", log: LexiconLog, type: .fault)
        }
    }
    return []
}

我在调用块参数旁边的 createFunction() 时遇到的错误是:

上下文闭包类型 '([Binding?]) -> Binding?' 需要 1 个参数,但在闭包体中使用了 2 个参数

在我升级之前用于编译的完全相同的代码。感谢您对解决此构建问题的任何帮助,谢谢。

标签: swiftsqlitesqlite.swift

解决方案


推荐阅读