为什么我不能将可选的 Swift String 传递给允许 NULL 指针的 C 函数?

2023-12-12

我有一个处理 C 字符串的 C 函数。该函数实际上允许字符串为 NULL 指针。声明如下:

size_t embeddedSize ( const char *_Nullable string );

在C中这样使用这个函数是没有问题的:

size_t s1 = embeddedSize("Test");
size_t s2 = embeddedSize(NULL); // s2 will be 0

现在我正在尝试从 Swift 使用它。以下代码有效

let s1 = embeddedSize("Test")
let s2 = embeddedSize(nil) // s2 will be 0

但是向它传递一个可选字符串是行不通的!此代码将无法编译:

let someString: String? = "Some String"
let s2 = embeddedSize(someString)

编译器抛出一个关于可选未解包的错误,并且 Xcode 询问我是否忘记添加! or ?。不过,我为什么要拆开它呢?NULL or nil是要输入到函数中的有效值。见上图,我刚刚通过nil直接编译并返回预期结果。在我的真实代码中,字符串是从外部输入的,它是可选的,我不能强制解开它,如果字符串是nil。那么如何使用可选字符串调用该函数呢?


最可能的答案是,虽然字符串文字可以转换为UnsafePointer<CChar>, and nil可转换为UnsafePointer<CChar>, and String也是,String?可能不在 Swift 2 中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我不能将可选的 Swift String 传递给允许 NULL 指针的 C 函数? 的相关文章

随机推荐