Warum kann ich keine optionale Swift-Zeichenfolge an die C-Funktion übergeben, die NULL-Zeiger zulässt?

Ich habe eine C-Funktion, die sich mit C-Strings befasst. Die Funktion erlaubt es Strings tatsächlich, NULL-Zeiger zu sein. Die Deklaration sieht wie folgt aus:

size_t embeddedSize ( const char *_Nullable string );

Es ist kein Problem, diese Funktion in C: @ zu verwende

size_t s1 = embeddedSize("Test");
size_t s2 = embeddedSize(NULL); // s2 will be 0

Jetzt versuche ich es von Swift zu benutzen. Der folgende Code funktioniert

let s1 = embeddedSize("Test")
let s2 = embeddedSize(nil) // s2 will be 0

Aber was nicht funktioniert, ist die Übergabe eines optionalen Strings! Dieser Code wird nicht kompiliert:

let someString: String? = "Some String"
let s2 = embeddedSize(someString)

Der Compiler gibt eine Fehlermeldung aus, dass das optionale Element nicht entpackt wurde, und Xcode fragt mich, ob ich möglicherweise vergessen habe, @ hinzuzufüge! oder?. Warum sollte ich es jedoch auspacken wollen?NULL odernil sind gültige Werte, die der Funktion zugeführt werden sollen. Siehe oben, ich habe gerade bestandennil dazu direkt und das nur gut kompiliert und das erwartete Ergebnis zurückgegeben. In meinem realen Code wird der String von extern eingegeben und ist optional. Ich kann das Entpacken nicht erzwingen. Das wird brechen, wenn der String @ wanil. Wie kann ich diese Funktion mit einem optionalen String aufrufen?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage