在夫特3,String
具有兩個初始化
public init(cString: UnsafePointer<CChar>)
public init(cString: UnsafePointer<UInt8>)
因此它可以從符號和無符號的字符(空終止)序列來創建。所以
let s = String(cString: yourCharPointer)
應該只是工作。
String
具有另一個初始化
public init?(validatingUTF8 cString: UnsafePointer<CChar>)
其中上形成不良的UTF-8序列失敗代替由替換字符替換它們 的。此init方法沒有對應的 取得無符號字符。
以現有的實現中CString.swift作爲示例,這不是太困難添加此作爲一個擴展:
extension String {
public init?(validatingUTF8 cString: UnsafePointer<UInt8>) {
guard let (s, _) = String.decodeCString(cString, as: UTF8.self,
repairingInvalidCodeUnits: false) else {
return nil
}
self = s
}
}
然後
if let s = String(validatingUTF8: yourCharPointer) {
print(s)
} else {
print("invalid UTF-8")
}
還與(空終止)序列的有符號和無符號字符。
明白了。它沒有出現在我的自動完成中。 – AthanasiusOfAlex