Ios Swift 2.0-“;无法转换类型为';NSURL';返回类型';字符串'&引用;
我正在尝试将一个旧的swift应用程序转换为2.0,但似乎无法通过此函数中的这段代码: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
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对象,而不是StringabsoluteString
在这种情况下不合适,因为它还返回前导的scheme文件://