Swift 3中的不安全字节

时间:2016-11-12 17:07:45

标签: ios swift xcode swift3

我正在写一个文件到磁盘,我正在将我的代码转换为Swift 3,并且陷入困境。想看看有人能不能给我一个正确的方向。

我目前的代码块是:

ssh seven -o StrictHostKeyChecking=no

Swift说调用data.bytes是不可用的,我需要使用.unsafebytes。我没有掌握你调用不安全字节的方式(它不像将字节切换到不安全的字节那么简单)

所以我做了一些研究,有些人说要使用这样的闭包块:

open let text: NSString
data = possibleData ?? Data()
open let fileURL: URL?
open let fileEncoding: String.Encoding?
fileprivate let data: Data!

text = NSString(bytesNoCopy: UnsafeMutableRawPointer(mutating: data.bytes.bindMemory(to: Void.self, capacity: data.count)), length: data.count, encoding: encoding.rawValue, freeWhenDone: false)!

我的问题是,我将什么放在闭包块中以使我的上述代码工作?我想我从根本上缺少一些东西。我不能使用字节,因为它再次给出了相同的错误。

有人有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:2)

如果您确实需要使用此模式,假设datavar而不是let,您可以执行以下操作:

let text = data.withUnsafeMutableBytes { bytes in
    return NSString(bytesNoCopy: bytes, length: data.count, encoding: encoding.rawValue, freeWhenDone: false)!
}

或者,我不知道你为什么要使用NSString,所以你可以这样做:

let text = data.withUnsafeMutableBytes { bytes in
    return String(bytesNoCopy: bytes, length: data.count, encoding: encoding, freeWhenDone: false)!
}

坦率地说,整个模式看起来很脆弱(为什么强制转换?为什么使用不安全的指针而不是各种安全模式?等等)。如果您要将其写入文件,那么为什么不直接编写Data

do {
    try data.write(to: fileURL)
} catch {
    print("Error: \(error.localizedDescription)")
}