Swift 4 конвертирует строку в UnsafeMutablePointer - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть C API, который имеет подпись вроде:

SendPing(char * content);

Теперь я хочу вызвать его из Swift.Swift выглядит как автоматически импортированный как:

SendPing(content: UnsafeMutablePointer<Int8>!)

Но, когда я пробую это в Swift, вроде:

var content:String = "sampledata"
SendPing(content)

Я подумал, что Swift может автоматически обрабатывать преобразование «String» в «UnsafeMutablePointer»но это не так.Сообщается об ошибке: «Не удалось преобразовать значение типа« String »в ожидаемый тип аргумента« UnsafeMutablePointer! ». Я помню, что это работает в Swift 3.0, но я могу ошибаться.

Как правильно обращаться с этим в Swift»4.2?


решение опубликовано в вопросе: Быстрое преобразование строки в UnsafeMutablePointer не работает для меня.Я не мог понять причину, но я думаю, что это связано с Swift 4.2.

1 Ответ

0 голосов
/ 24 декабря 2018

Последующие действия и резюме:

1) решение в ссылке Быстрое преобразование строки в UnsafeMutablePointer больше не действует в Swift 4.

2) Чтобы получить UnsafeMutablePointer (Int8) из строки, самый простой способ:

let contentPointer = strdup(content)

3) Однако вам следуетвсегда помните, что ответственность за освобождение памяти лежит на звонящем.Выше код будет использовать новую память, и она должна быть освобождена впоследствии.: * 10101 *

let contentPointer = strdup(content)
SendPing(content: contentPointer)
....

free(contentPointer)

В противном случае вы столкнетесь с проблемой утечки памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...