SwiftKueryPostgresql连接失败,出现错误“0”;线程1:EXC_BAD_指令(代码=EXC_I386_INVOP,子代码=0x0)";
我对斯威夫特很陌生,更具体地说是关于Kitura的。我用它来处理与数据库的通信 我正在为一个特定的项目编写一个ORM库。我正在这样测试我的连接(我从文档中了解到): 我的课堂背景:SwiftKueryPostgresql连接失败,出现错误“0”;线程1:EXC_BAD_指令(代码=EXC_I386_INVOP,子代码=0x0)";,swift,postgresql,kitura,Swift,Postgresql,Kitura,我对斯威夫特很陌生,更具体地说是关于Kitura的。我用它来处理与数据库的通信 我正在为一个特定的项目编写一个ORM库。我正在这样测试我的连接(我从文档中了解到): 我的课堂背景: public class Context { private let pool : Connection public init?(pool : Connection?) { guard pool != nil else { return nil } self.poo
public class Context {
private let pool : Connection
public init?(pool : Connection?) {
guard pool != nil else { return nil }
self.pool = pool!
}
}
当我在xcode上运行testConnection()
时,我在第129行到达SwiftKuery/ConnectionPool.swift,并出现此错误
Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
我做错了什么?我错过了什么吗?我真的不知道该怎么办
这是我的包裹。如果可以的话
import PackageDescription
let package = Package(
name: "project",
products: [
.library(
name: "projet",
targets: ["project"]),
],
dependencies: [
.package(url: "https://github.com/IBM-Swift/Swift-Kuery-PostgreSQL.git", from: "1.2.0")
],
targets:[
.target(
name: "project",
dependencies: ["SwiftKueryPostgreSQL"]),
.testTarget(
name: "projectTests",
dependencies: ["project"]),
]
)
谢谢线程1:EXC\U BAD\U指令(代码=EXC\U I386\U INVOP,子代码=0x0)错误通常在强制展开时发生,可选设置为零。我建议不要做
self.pool=pool代码>,您可以这样做
保护self.pool=池else{
归零
}
guard语句将为您打开可选值,如果不能打开,if将转到else
我注意到了几件事:
-在您的程序包.swift
中,缺少SwiftKuery
依赖项。
-似乎您在可测试导入myprojet
错误所指向的行是连接的deinit
函数。当连接
超出范围或未被其他对象引用以清除内存时,将调用此函数。您可能试图在删除连接后访问该连接,因此出现错误。我建议您学习如何在swift中使用guard let
,但您需要做的基本工作如下:
public class Context {
private let pool : Connection
public init?(pool : Connection?) {
guard let poolThatIsNotNil = pool else { return nil }
self.pool = poolThatIsNotNil
}
}
谢谢你的回答。我做了您所说的更改(看起来非常合理),现在我有以下错误:类型“Connection”的值?“在作业中”不符合“连接”
,这对于SwiftKuery来说非常混乱,尽管看起来很奇怪,但我不必把它放在我的包中。swift,因为它是由SwiftKueryPostgresql导入的,但是在某些时候,我必须显式地导入它,以使用连接,例如,swiftkuery是我们的SQL插件的抽象层。在这种情况下,连接
协议在Swift Kuery
中声明,并在Swift Kuery PostgreSQL
中使用,但它不会将其公开给顶级应用程序。导致此错误的原因是,您试图将一种类型的连接
分配给连接
-首先必须将其打开guard让unwrapped=pool else{return nil}
然后分配它self.pool=unwrapped
好的,谢谢你帮了我很多忙。我对强类型语言非常困惑,因为我来自PHP。希望我很快会好起来。谢谢
public class Context {
private let pool : Connection
public init?(pool : Connection?) {
guard let poolThatIsNotNil = pool else { return nil }
self.pool = poolThatIsNotNil
}
}