Автоматическое создание строкового представления C из Swift String
выполняется только при вызове функции с аргументом UnsafePointer<Int8>
(сравните строковое значение с UnsafePointerПоведение параметра функции ), и строка C действительна только на время вызова функции.
Если строка C требуется только в течение ограниченного времени жизни, вы можете выполнить
let str = "Hello world"
str.withCString { cStringPtr in
var appInfo = VkApplicationInfo()
appInfo.pApplicationName = cStringPtr
// ...
}
Для увеличения срока службы вы можете продублировать строку:
let str = "Hello world"
let cStringPtr = strdup(str)! // Error checking omitted for brevity
var appInfo = VkApplicationInfo()
appInfo.pApplicationName = UnsafePointer(cStringPtr)
и освободить память, если она больше не нужна:
free(cStringPtr)