Почему я не могу передать необязательную функцию Swift String в C, которая допускает указатели NULL?

У меня есть функция C, которая имеет дело с C строк. Функция фактически позволяет строкам быть указателями NULL. Объявление выглядит следующим образом:

size_t embeddedSize ( const char *_Nullable string );

Нет проблем использовать эту функцию в Си:

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 спрашивает меня, не забыл ли я добавить! или же?, Однако, почему я хотел бы развернуть это?NULL или жеnil действительные значения для подачи в функцию. Смотри выше, я только что прошелnil непосредственно к нему, и это скомпилировано очень хорошо и вернул ожидаемый результат. В моем реальном коде строка передается извне, и это необязательно, я не могу принудительно развернуть ее, что приведет к разрыву, если строка былаnil, Итак, как я могу вызвать эту функцию с необязательной строкой?

Ответы на вопрос(3)

Ваш ответ на вопрос