Swift 3.0 使用 write(toFile:atomically:) 写入二进制图像数据

Mag*_*nas 4 cocoa-touch path uiimagepickercontroller ios swift

我正在完成教程Project10并尝试将其转换为 Swift 3.0。这是使用UIImagePickerController选择图像然后将其保存到文档目录的通常直接情况。

我在这一行收到错误:

jpegData.write(toFile: imagePath, atomically: true)
Run Code Online (Sandbox Code Playgroud)

生命的开始是这样的:

jpegData.writeToFile(imagePath, atomically: true)
Run Code Online (Sandbox Code Playgroud)

该错误想要将我的参数替换为:

jpegData.write(to: imagePath, options: true)
Run Code Online (Sandbox Code Playgroud)

我很确定这不是我想要的,而且它会导致进一步的字符串/URL 错误。这两种方法的完整内容是:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    var newImage: UIImage

    if let possibleImage = info[UIImagePickerControllerEditedImage] as? UIImage {
        newImage = possibleImage
    } else if let possibleImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
        newImage = possibleImage
    } else {
        return
    }

    let imageName = NSUUID().uuidString
    let imagePath = getDocumentsDirectory().appendingPathComponent(imageName)

    if let jpegData = UIImageJPEGRepresentation(newImage, 80) {
        jpegData.write(toFile: imagePath, atomically: true)
    }

    dismiss(animated: true, completion: nil)
}

func getDocumentsDirectory() -> NSString {
    let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
    let documentsDirectory = paths[0]
    return documentsDirectory
}
Run Code Online (Sandbox Code Playgroud)

我只是对字符串、NSString 和 URL 感到困惑吗?

Mag*_*nas 5

嗯,我在以下方面取得了一些进展:

let imagePath = getDocumentsDirectory().appendingPathComponent(imageName)
let path = URL(fileURLWithPath: imagePath)
if let jpegData = UIImageJPEGRepresentation(newImage, 80) {
   try! jpegData.write(to: path, options: [.atomic])
}
Run Code Online (Sandbox Code Playgroud)

丑陋且松弛,可能存在错误(目前),但使用 El Capitan 建议方法的一个版本并将字符串转换为 URL 让我前进。