[英]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.