Почему я не могу передать необязательную функцию 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
, Итак, как я могу вызвать эту функцию с необязательной строкой?