Я получаю некоторые данные из интернета и мне нужно угадать кодировку, если она не указана, поэтому я использую эту функцию stringEncoding(for:encodingOptions:convertedString:usedLossyConversion:)
, и для получения преобразованной строки требуется передать AutoreleasingUnsafeMutablePointer
, я написалкод, подобный следующему:
var str = "Hello, playground"
func decode(data: Data) -> String? {
var covertedString = NSString()
let stringPointer = AutoreleasingUnsafeMutablePointer<NSString?>(&covertedString)
guard NSString.stringEncoding(for: data, encodingOptions: nil, convertedString: stringPointer, usedLossyConversion: nil) != 0 else {
return nil
}
return covertedString as String
}
let data = str.data(using: .utf8)!
decode(data: data)
Хотя covertedString
, который я получил после вызова функции, верен, приложение всегда вылетает.Любая идея, почему AutoreleasingUnsafeMutablePointer
делает это сбой?Я попытался не пропустить convertedString
, затем он больше не падает, поэтому похоже, что это основной случай.Любая идея, почему это происходит сбой?
Я использую Xcode версии 10.1 (10B61), с Swift 4