【发布时间】:2016-04-22 02:31:26
【问题描述】:
我在将 Swift 字符串数组转换为带有签名的 c 函数数组时遇到问题:
PGconn *PQconnectStartParams(const char * const *keywords, const char * const *values, int expand_dbname)
在 Swift 中,const char * const * 显示为:
<UnsafePointer<UnsafePointer<Int8>>
所以我尝试转换名为“options”的字典 [String:String] 的内容,并将其提供给函数,如下所示:
var keys = [[Int8]]()
var values = [[Int8]]()
for (key, value) in options {
var int8Array = key.cStringUsingEncoding(NSUTF8StringEncoding)!
keys.append(int8Array)
int8Array = value.cStringUsingEncoding(NSUTF8StringEncoding)!
values.append(int8Array)
}
pgConnection = PQconnectStartParams(UnsafePointer(keys), UnsafePointer(values), 0)
可以编译运行,但是函数不起作用。
任何见解将不胜感激。
【问题讨论】:
-
好的:你在谈论一个名为
PQconnectdbParams()的函数,但你正在调用一个名为PQconnectStartParams()的函数...? -
看看
const char * const *keywords。keywords是指向const的指针,指向const char的指针(与char const相同,均表示“常量字符”)。这意味着您不是在寻找单个字符串(“空终止字符数组”),但您可能正在寻找字符串的 array。有点像char **argv。我对 Swift 了解不多,但您必须弄清楚如何将 Swift 字符串转换为 C 空终止字符数组,然后必须找出如何将这些数组转换为 C 数组我认为是字符串。 -
对不起。笔误。正在查看文档的错误部分。修复了函数签名,你是对的,我不是在寻找一个以空值结尾的数组。我需要和 cstrings 数组。这就是我认为我在代码中生成的内容。
-
好的,看起来您正在尝试生成它。但是因为我对 Swift 一无所知,所以我只是想确保您尝试做正确的事情。
-
为什么
.cStringUsingEncoding(NSUTF8StringEncoding)会返回int8array?我很困惑字符串和int8的关系如何?