我有一个处理 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(使用前将#替换为@)