SwiftKueryPostgresql连接失败,出现错误“0”;线程1:EXC_BAD_指令(代码=EXC_I386_INVOP,子代码=0x0)";

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

我对斯威夫特很陌生,更具体地说是关于Kitura的。我用它来处理与数据库的通信

我正在为一个特定的项目编写一个ORM库。我正在这样测试我的连接(我从文档中了解到):

我的课堂背景:

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
    }
}