Por que não posso passar uma função Swift String para C opcional que permite ponteiros NULL?
Eu tenho uma função C que lida com seqüências de caracteres C. A função realmente permite que as strings sejam ponteiros NULL. A declaração é a seguinte:
size_t embeddedSize ( const char *_Nullable string );
Não há problema em usar esta função como esta em C:
size_t s1 = embeddedSize("Test");
size_t s2 = embeddedSize(NULL); // s2 will be 0
Agora estou tentando usá-lo da Swift. O código a seguir funciona
let s1 = embeddedSize("Test")
let s2 = embeddedSize(nil) // s2 will be 0
Mas o que não funciona é passar uma string opcional para ele! Este código não será compilado:
let someString: String? = "Some String"
let s2 = embeddedSize(someString)
O compilador gera um erro sobre o opcional não ser desembrulhado e o Xcode me pergunta se eu esqueci de adicionar!
ou?
. No entanto, por que eu gostaria de desembrulhá-lo?NULL
ounil
são valores válidos a serem alimentados para a função. Veja acima, acabei de passarnil
diretamente e compilou muito bem e retornou o resultado esperado. No meu código real, a string é alimentada por externa e é opcional, não posso forçar a desembrulhar, isso será interrompido se a string fornil
. Então, como posso chamar essa função com uma sequência opcional?