2017-07-08 36 views
0

我现在有一个包含路径的图像文件,像这样的字符串:如何从swift 4中的特定字符到字符串的末尾获取子字符串?

/Users/user/Library/Developer/CoreSimulator/Devices/Hidden/data/Containers/Data/Application/Hidden/Documents/AppName/2017-07-07_21:14:52_0.jpeg 

我想找回我的图像文件的全名,像这样:2017-07-07_21:14:52_0.jpeg

我该如何获得子字符串从最后一个/开始到文件路径的结尾?

我看到与使用子问题:

  1. Swift: How to get substring from start to last index of character
  2. How does String substring work in Swift 3
  3. Substring from String in Swift

然而,所提供的答案,并没有帮助我与我的具体问题。

我确定它可能是非常简单的东西,但我一直得到的是子字符串的错误范围。

谢谢!

回答

1

要回答你直接的问题:您可以搜索过去 出现字符串并获得子从该位置开始:

let path = "/Users/user/.../AppName/2017-07-07_21:14:52_0.jpeg" 
if let r = path.range(of: "/", options: .backwards) { 
    let imageName = path.substring(from: r.upperBound) 
    print(imageName) // 2017-07-07_21:14:52_0.jpeg 
} 

但是你想要的是文件路径的“最后路径组件”。 URL这方面就具有适当的方法:

let path = "/Users/user/.../AppName/2017-07-07_21:14:52_0.jpeg" 
let imageName = URL(fileURLWithPath: path).lastPathComponent 
print(imageName) // 2017-07-07_21:14:52_0.jpeg 
+0

完美的,我不知道'URL'必须达到这一目的的方法! – Pangu

0

试试这个:

1)

var str = "/Users/user/Library/Developer/CoreSimulator/Devices/Hidden/data/Containers/Data/Application/Hidden/Documents/AppName/2017-07-07_21:14:52_0.jpeg" 
let array = str.components(separatedBy: "/") 

print(array[array.count-1]) //2017-07-07_21:14:52_0.jpeg 

2)

let str = "/Users/user/Library/Developer/CoreSimulator/Devices/Hidden/data/Containers/Data/Application/Hidden/Documents/AppName/2017-07-07_21:14:52_0.jpeg" 

var fileName = URL(fileURLWithPath: str).lastPathComponent 

print(fileName) //2017-07-07_21:14:52_0.jpeg 

let fileName = URL(fileURLWithPath: path).deletingPathExtension().lastPathComponent 
print(fileName) //2017-07-07_21:14:52_0 
相关问题