解决Xcode Cloud中Expression类型查找歧义的编译错误
解决Xcode Cloud构建时
Expression类型歧义问题 问题原因
'Expression' is ambiguous for type lookup in this context错误的本质是:当前代码环境中存在多个同名的Expression定义(比如自定义类型、其他第三方库),导致编译器无法确定你要使用的是SQLite库中的Expression类型。
修改方案
直接在所有Expression前加上SQLite库的命名空间限定,明确指定使用SQLite框架中的类型:
修改后的代码片段
import SQLite import Foundation //---------line 12 -------- ↓ var idCol : SQLite.Expression<Int64> = SQLite.Expression("ID") // column variable that represents the ID column //---------line 60 -------- ↓ func insert(tbl: Table, cols: SQLite.Expression<Int64> ..., vals: Int64 ...){ do { ... } } //---------line 101 -------- ↓ func createTable(pk: SQLite.Expression<Int64>, cols: SQLite.Expression<Int64> ...) { // run the create table if the database connection exists and it doesn't exist already. if let definiteDB = db { do { try _ = definiteDB.scalar(tbl.exists) //print("table exists") } catch { do { //print("table does not exist") try definiteDB.run(tbl.create() {t in t.column(pk, primaryKey: .autoincrement) }) for col in cols { try definiteDB.run(tbl.addColumn(notNullToNull(expr: col))) } } catch let error { print(error) } } } }
简化写法(可选)
如果项目中没有其他Expression类型的使用需求,可以通过类型别名简化代码,避免重复写命名空间:
import SQLite // 定义类型别名,后续直接用Expression指代SQLite库中的类型 typealias Expression = SQLite.Expression // 之后代码可以保持原有写法,不会再出现歧义 var idCol : Expression<Int64> = Expression("ID")
内容的提问来源于stack exchange,提问作者Tunku Rafi
相关产品推荐
相关产品推荐

