Swift 将nsData解码为字符串数组

Swift 将nsData解码为字符串数组,swift,Swift,我想将nsData解码为字符串数组。我现在有这个代码: func nsDataToStringArray(data: NSData) -> [String] { var decodedStrings = [String]() var stringTerminatorPositions = [Int]() var currentPosition = 0 data.enumerateBytes(

我想将nsData解码为字符串数组。我现在有这个代码:

func nsDataToStringArray(data: NSData) -> [String] {
            var decodedStrings = [String]()

            var stringTerminatorPositions = [Int]()

            var currentPosition = 0
            data.enumerateBytes() {
                buffer, range, stop in

                let bytes = UnsafePointer<UInt8>(buffer)
                for i in 0 ..< range.length {
                    if bytes[i] == 0 {
                        stringTerminatorPositions.append(currentPosition)
                    }

                    currentPosition += 1
                }
            }

            var stringStartPosition = 0
            for stringTerminatorPosition in stringTerminatorPositions {
                let encodedString = data.subdata(with: NSMakeRange(stringStartPosition, stringTerminatorPosition - stringStartPosition))
                let decodedString =  NSString(data: encodedString, encoding: String.Encoding.utf8.rawValue)! as String
                decodedStrings.append(decodedString)
                stringStartPosition = stringTerminatorPosition + 1
            }

            return decodedStrings
        }
func-nsdatatostringaray(数据:NSData)->[String]{
var decodedStrings=[String]()
变量stringTerminatorPositions=[Int]()
var currentPosition=0
data.enumerateBytes(){
缓冲区,范围,停止
let bytes=UnsafePointer(缓冲区)
对于0..
但是我在这一行得到一个错误:let bytes=
UnsafePointer(buffer)

无法使用 类型为“(UnsafeRawPointer)”的参数列表


是否需要将缓冲区转换为非安全指针?如果是这样,我该怎么做?

enumerateBytes()中的
buffer
闭包是一个
UnsafeRawPointer
您必须将其“重新绑定”到Swift 3中的
UInt8
指针:

// let bytes = UnsafePointer<UInt8>(buffer)
let bytes = buffer.assumingMemoryBound(to: UInt8.self)
这是怎么回事

  • 数据
    UInt8的
    序列
    ,因此
  • split(分隔符:0)
    可以在其上调用,返回 “数据切片”(是源数据的视图,而不是副本)
  • 每个“数据片”同样是
    UInt8
    序列,其中
    
    字符串
    可以使用
    字符串(字节:$0,编码:.utf8)创建
    。 这是一个可失败的初始值设定项(因为数据可能是无效的UTF-8)
  • flatMap{…}
    返回一个包含所有非nil结果的数组, i、 e.包含可从中创建的所有字符串的数组 零字节之间的有效UTF-8代码序列

在Swift 3中,我更喜欢签名
func stringArray(来自nsData:nsData)
;-)@瓦迪安:真的!或
func-stringArray(来自数据:data)
,如果可能的话我保留了这个名字,以便OP可以直接用他/她的代码测试它。我们不需要谈论在Swift 3中滥用过时的<代码> NS…< /代码>基础类…
func nsDataToStringArray(nsData: NSData) -> [String] {
    let data = nsData as Data
    return data.split(separator: 0).flatMap { String(bytes: $0, encoding: .utf8) }
}