简体   繁体   English

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

[英]Using a Swift String with NSData without NSString

Is it possible to init a Swift string (not NSString ) with the contents of an NSData object without creating an NSString first? 是否可以使用NSData对象的内容初始化Swift字符串(而不是NSString )而不首先创建NSString?

I know I can use this with NSString: 我知道我可以在NSString中使用它:

var datastring = NSString(data data: NSData!, encoding encoding: UInt)

But how can I use a basic Swift String type? 但是我如何使用基本的Swift String类型? I thought Swift strings and NSStrings were interchangeable, do I really have to get the data out of NSData using NSString and then assign that value to a Swift string? 我认为Swift字符串和NSStrings是可以互换的,我真的必须使用NSString从NSData中获取数据然后将该值赋给Swift字符串吗?

As of Swift 1.2 they aren't quite interchangeable, but they are convertible, so there's really no reason not to use NSString and its constructors when you need to. 从Swift 1.2开始,它们不是可以互换的,但是它们是可转换的,所以当你需要时,没有理由不使用NSString及其构造函数。 This will work fine: 这样可以正常工作:

var datastring = NSString(data:data, encoding:NSUTF8StringEncoding) as! String

The as! as! is needed because NSString(...) can return nil for invalid input - if you aren't sure that the data represents a valid UTF8 string, you may wish to use the following instead to return a String? 是必需的,因为NSString(...)可以为无效输入返回nil - 如果您不确定数据是否代表有效的UTF8字符串,您可能希望使用以下代码来返回String? (aka Optional<String> ). (又名Optional<String> )。

var datastring = NSString(data:data, encoding:NSUTF8StringEncoding) as String?

Once constructed, you can then use datastring just like any other Swift string, eg 构造完成后,您可以像使用任何其他Swift字符串一样使用datastring字符串,例如

var foo = datastring + "some other string"
var buffer = [UInt8](count:data.length, repeatedValue:0)
data.getBytes(&buffer, length:data.length)
var datastring = String(bytes:buffer, encoding:NSUTF8StringEncoding)

In Swift 2.0 You can do something like this:- 在Swift 2.0中你可以这样做: -

import Foundation

var dataString = String(data: YourData, encoding: NSUTF8StringEncoding)

In Swift 3.0 :- 在Swift 3.0中: -

import Foundation

var dataString = String(data: data, encoding: String.Encoding.utf8)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM