在没有NSString的情况下使用带有NSData的Swift字符串

Woo*_*ock 33 ios swift

是否可以在NSString不创建NSString的情况下使用NSData对象的内容初始化Swift字符串(而不是)?

我知道我可以在NSString中使用它:

var datastring = NSString(data data: NSData!, encoding encoding: UInt)
Run Code Online (Sandbox Code Playgroud)

但是我如何使用基本的Swift String类型?我认为Swift字符串和NSStrings是可以互换的,我真的必须使用NSString从NSData中获取数据然后将该值赋给Swift字符串吗?

Nic*_*ood 51

从Swift 1.2开始,它们不是可以互换的,但它们是可转换的,所以NSString在你需要的时候,没有理由不使用它和它的构造函数.这样可以正常工作:

var datastring = NSString(data:data, encoding:NSUTF8StringEncoding) as! String
Run Code Online (Sandbox Code Playgroud)

as!是必需的,因为NSString(...)可以返回nil无效输入 - 如果您不确定数据是否代表有效的UTF8字符串,您可能希望使用以下代码来返回String?(aka Optional<String>).

var datastring = NSString(data:data, encoding:NSUTF8StringEncoding) as String?
Run Code Online (Sandbox Code Playgroud)

一旦构造,你就可以datastring像任何其他Swift字符串一样使用,例如

var foo = datastring + "some other string"
Run Code Online (Sandbox Code Playgroud)

  • 对于Swift 1.2,你需要附加`as!String`到`NSString()`调用的结尾. (5认同)

Ant*_*ton 12

var buffer = [UInt8](count:data.length, repeatedValue:0)
data.getBytes(&buffer, length:data.length)
var datastring = String(bytes:buffer, encoding:NSUTF8StringEncoding)
Run Code Online (Sandbox Code Playgroud)