Я пытаюсь использовать dispatch_queue_create с динамической строкой, которую я создаю во время выполнения в качестве первого параметра. Компилятор жалуется, потому что ожидает стандартную строку c. Если я переключу это на строку времени, заданную для компиляции, ошибка исчезнет. Может ли кто-нибудь сказать мне, как преобразовать String в стандартную строку c?
Как преобразовать String в CString на языке Swift?
Ответ 1
Вы можете получить CString
следующим образом:
import Foundation
var str = "Hello, World"
var cstr = str.bridgeToObjectiveC().UTF8String
EDIT: Обновление Beta 5 - bridgeToObjectiveC()
больше не существует (спасибо @Sam):
var cstr = (str as NSString).UTF8String
Ответ 2
Существует также String.withCString(), который может быть более уместным, в зависимости от вашего варианта использования. Пример:
var buf = in_addr()
let s = "17.172.224.47"
s.withCString { cs in inet_pton(AF_INET, cs, &buf) }
Update Swift 2.2: Swift 2.2 автоматически соединяет строки String с C, поэтому приведенный выше пример теперь прост:
var buf = in_addr()
let s = "17.172.224.47"
net_pton(AF_INET, s, &buf)
Гораздо проще: →
Ответ 3
Быстрые мосты String и NSString. Я считаю, что это может быть альтернативой ответам Цезари:
import Foundation
var str = "Hello World"
var cstr = str.cStringUsingEncoding(NSUTF8StringEncoding)
Документация по API:
/* Methods to convert NSString to a NULL-terminated cString using the specified
encoding. Note, these are the "new" cString methods, and are not deprecated
like the older cString methods which do not take encoding arguments.
*/
func cStringUsingEncoding(encoding: UInt) -> CString // "Autoreleased"; NULL return if encoding conversion not possible; for performance reasons, lifetime of this should not be considered longer than the lifetime of the receiving string (if the receiver string is freed, this might go invalid then, before the end of the autorelease scope)
Ответ 4
версия Swift 3 как @mbeaty say:
import Foundation
var str = "Hello World"
var cstr = str.cString(using: String.Encoding.utf8)
API Apple:
Foundation > String > cString (используя:)
Метод экземпляра
cString(using:)
Возвращает представление строки в виде строки C с использованием данной кодировки.