错误:类型“String”的值没有成员“URLByAppendingPathComponent”

4

我的错误是: 类型'String'的值没有成员'URLByAppendingPathComponent'

我在这一行遇到了错误:

 let savePath = documentDirectory.URLByAppendingPathComponent("mergeVideo-\(date).mov")

我的完整代码:

  // 4 - Get path
  let documentDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] 
  var dateFormatter = NSDateFormatter()
  dateFormatter.dateStyle = .LongStyle
  dateFormatter.timeStyle = .ShortStyle
  let date = dateFormatter.stringFromDate(NSDate())
  let savePath = documentDirectory.URLByAppendingPathComponent("mergeVideo-\(date).mov")

    let url = NSURL(fileURLWithPath: savePath)

我按照这个教程进行操作:这里

3个回答

8

It's

let savePath = (documentDirectory as NSString).stringByAppendingPathComponent("mergeVideo-\(date).mov")

由于documentDirectory是一个字符串,而不是NSURL,因此需要进行转换。

编辑

我建议使用这个API:

let documentDirectory = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false)
var dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .LongStyle
dateFormatter.timeStyle = .ShortStyle
let date = dateFormatter.stringFromDate(NSDate())
let saveURL = documentDirectory.URLByAppendingPathComponent("mergeVideo-\(date).mov") // now it's NSURL

Swift 3+

let documentDirectory = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
var dateFormatter = DateFormatter()
dateFormatter.dateStyle = .long
dateFormatter.timeStyle = .short
let date = dateFormatter.string(from: Date())
let saveURL = documentDirectory.appendingPathComponent("mergeVideo-\(date).mov")

1
修改那一行代码后,出现了错误:'stringByAppendingPathComponent' is unavailable: Use URLByAppendingPathComponent on NSURL instead. - user5513630
我更新了回答并修复了问题。也许最好还是使用与 URL 相关的 API(使用 NSFileManager 获取 URL)。 - vadian

1
正如错误所述,String类中没有可用的URLByAppendingPathComponent方法,该函数属于NSURL
您需要使用以下方法:
let savePath = (documentDirectory as NSString).stringByAppendingPathComponent("mergeVideo-\(date).mov")

或者你可以像这样做:

let url      = NSURL(fileURLWithPath: documentDirectory)
let savePath = url.URLByAppendingPathComponent("mergeVideo-\(date).mov")

感谢您的回复解决方案。 - user5513630
@user5513630:这是由于Swift 2.0的原因,我正在更新我的答案并提供另一种替代方案。 - Midhun MP

0

Swift 3: URL附加路径组件

    let documentDirectory = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
        let completeMovie = documentDirectory.appendingPathComponent("movie.mov") // now it's NSURL

Swift 3 路径

  let fm = FileManager.default

        let docsurl = try! fm.url(for:.documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
        let completeMovie = String(describing: docsurl.appendingPathComponent("merge.mp4"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接