在swift中替换文件名的扩展名

Add*_*dev 8 ios swift

给定一个格式的字符串filename.fileextension我想用fileextension替换newextension.我该怎么做?

在java中它会

foo.substring(0, foo.lastIndexOf(".")) + ".newextension"
Run Code Online (Sandbox Code Playgroud)

Rob*_*Rob 11

Swift 4中的字面翻译将是:

let path2 = String(path[..<path.range(of: ".", options: .backwards)!.lowerBound] + ".newextension")
Run Code Online (Sandbox Code Playgroud)

但Apple一直在将我们从String路径转移出去,而是希望我们URL在本地文件系统中使用文件.

例如,假设我们在文档目录中引用了一些文件:

let fileURL = try! FileManager.default
    .url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)   // nowadays, you might even prefer `.applicationSupportDirectory
    .appendingPathComponent("test.png")
Run Code Online (Sandbox Code Playgroud)

如果你想替换.png.jpg,你会怎么做:

let jpgURL = fileURL
    .deletingPathExtension()
    .appendingPathExtension("jpg")
Run Code Online (Sandbox Code Playgroud)

对于以前的Swift版本,请参阅此答案的先前版本.

  • 这确实返回一个需要打开的可选项. (2认同)

Ede*_*den 0

stringByAppendingPathExtension不再适用于 Swift 2.0(如果您正在使用String)。但它仍然适用于NSString. 所以你可以这样做:

var storePath = (NSSearchPathForDirectoriesInDomains(.DocumentDirectory , .UserDomainMask, true)[0]) as NSString
storePath = storePath.stringByAppendingPathExtension("model.sqlite")!
Run Code Online (Sandbox Code Playgroud)