Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift 2.0-“;无法转换类型为';NSURL';返回类型';字符串'&引用;_Ios_Swift_Swift2 - Fatal编程技术网

Ios Swift 2.0-“;无法转换类型为';NSURL';返回类型';字符串'&引用;

Ios Swift 2.0-“;无法转换类型为';NSURL';返回类型';字符串'&引用;,ios,swift,swift2,Ios,Swift,Swift2,我正在尝试将一个旧的swift应用程序转换为2.0,但似乎无法通过此函数中的这段代码: func documentsPathForFileName(name: String) -> String { let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true); let path = paths[0] ; let fullPath = NSU

我正在尝试将一个旧的swift应用程序转换为2.0,但似乎无法通过此函数中的这段代码:

func documentsPathForFileName(name: String) -> String {

    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true);

    let path = paths[0] ;

    let fullPath = NSURL(fileURLWithPath: NSTemporaryDirectory()).URLByAppendingPathComponent(name)

    return fullPath

}
在“let fullPath”行中,我得到错误“无法将'NSURL'类型的返回表达式转换为'String'类型的返回表达式”

以下是完整的.swift文件:

import UIKit

class CardViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate, UIScrollViewDelegate {

@IBOutlet weak var SecondCaptureButton: UIBarButtonItem!

@IBOutlet weak var imageView: UIImageView!

@IBOutlet weak var OpenButton: UIBarButtonItem!

@IBOutlet weak var MainCaptureButton: UIButton!

var imagePicker: UIImagePickerController!

 /* func supportedInterfaceOrientations() -> Int {
    return Int(UIInterfaceOrientationMask.Portrait.rawValue)
    } */


    override func shouldAutorotate() -> Bool {
        return false
    }

   override func viewDidLoad() {
    super.viewDidLoad()

    OpenButton.target = self.revealViewController()
    OpenButton.action = Selector("revealToggle:")

    self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())

    MainCaptureButton.layer.borderColor = UIColor.blackColor().CGColor
    MainCaptureButton.layer.cornerRadius = 10
    MainCaptureButton.layer.borderWidth = 1
    MainCaptureButton.titleLabel?.textAlignment = NSTextAlignment.Center

    let possibleOldImagePath = NSUserDefaults.standardUserDefaults().objectForKey("path") as! String?

    if let oldImagePath = possibleOldImagePath {

        let oldFullPath = self.documentsPathForFileName(oldImagePath)

        let oldImageData = NSData(contentsOfFile: oldFullPath)

        // here is your saved image:

        if let oldImage = UIImage(data: oldImageData!) {

            imageView.image = oldImage
            print("Old Photo Retrieved")

            self.view.bringSubviewToFront(imageView)

        }

    }
}

func documentsPathForFileName(name: String) -> String {

    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true);

    let path = paths[0] ;

    let fullPath = NSURL(fileURLWithPath: NSTemporaryDirectory()).URLByAppendingPathComponent(name)

    return fullPath

}

@IBAction func TakePhoto(sender: AnyObject) {
    imagePicker = UIImagePickerController()
    imagePicker.delegate = self
    imagePicker.sourceType = .Camera

    presentViewController(imagePicker, animated: true, completion: nil)

}

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    imagePicker.dismissViewControllerAnimated(true, completion: nil)
    self.view.sendSubviewToBack(MainCaptureButton)
    imageView.image = info[UIImagePickerControllerOriginalImage] as? UIImage

    let imageData = UIImageJPEGRepresentation(imageView.image!, 1)
    let relativePath = "image_\(NSDate.timeIntervalSinceReferenceDate()).jpg"
    let path = self.documentsPathForFileName(relativePath)

    imageData!.writeToFile(path, atomically: true)

    NSUserDefaults.standardUserDefaults().setObject(relativePath, forKey: "path")
    NSUserDefaults.standardUserDefaults().synchronize()

    print("New Photo Saved")


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}

}

您的方法定义为返回字符串:

func documentsPathForFileName(name: String) -> String { ...
但是您正在尝试返回一个
NSURL
。您可以更改方法签名以返回
NSURL

func documentsPathForFileName(name: String) -> NSURL { ...
也可以返回URL的字符串表示形式:

return fullPath.absoluteString

错误信息非常清楚

fullPath
是一个
NSURL
实例,返回值为
String

或者更改返回值

func documentsPathForFileName(name: String) -> NSURL {
    let fullPath = NSURL(fileURLWithPath: NSTemporaryDirectory()).URLByAppendingPathComponent(name)
    return fullPath
}
或者返回一个字符串

func documentsPathForFileName(name: String) -> String {
    let fullPath = NSTemporaryDirectory().stringByAppendingPathComponent(name)
    return fullPath
}

我省略了局部变量
path
,因为它没有在代码段中使用。

NSURL(…)返回一个NSURL对象,而不是String
absoluteString
在这种情况下不合适,因为它还返回前导的scheme
文件://