¿Por qué no puedo pasar una función opcional Swift String a C que permite punteros NULL?
Tengo una función C que se ocupa de las cadenas C. La función en realidad permite que las cadenas sean punteros NULL. La declaración es como sigue:
size_t embeddedSize ( const char *_Nullable string );
No es problema usar esta función como esta en C:
size_t s1 = embeddedSize("Test");
size_t s2 = embeddedSize(NULL); // s2 will be 0
Ahora estoy tratando de usarlo desde Swift. El siguiente código funciona
let s1 = embeddedSize("Test")
let s2 = embeddedSize(nil) // s2 will be 0
¡Pero lo que no funciona es pasarle una cadena opcional! Este código no compilará:
let someString: String? = "Some String"
let s2 = embeddedSize(someString)
El compilador arroja un error acerca de que el opcional no se desenvuelve y Xcode me pregunta si tal vez olvidé agregar!
o?
. Sin embargo, ¿por qué querría desenvolverlo?NULL
onil
son valores válidos para alimentar a la función. Ver arriba, acabo de pasarnil
directamente y eso se compiló bien y devolvió el resultado esperado. En mi código real, la cadena se alimenta desde afuera y es opcional, no puedo forzar el desenvolvimiento, eso se romperá si la cadena fueranil
. Entonces, ¿cómo puedo llamar a esa función con una cadena opcional?