swift 3 : Fast file path separation

标签 swift url split directory filenames

我需要将文件路径的一部分拆分为数千个文件。所以我需要一个快速的功能。这是我自己写的,但似乎运行得很慢:

// find string in "str", split at the position, delivers left and right side

func revFindSplit_(str : String, searchString : String) -> (String, String) {
    let strr = String(str.characters.reversed())  // reverse main string
    let searchStringr = String(searchString.characters.reversed())    // reverse search string too

    if let strrindex = strr.range(of: searchStringr) {  // now we can search from back to front

        let rangeOfS2 = strr.characters.startIndex..<strrindex.lowerBound   // we got search result: part 1 (front)
        let rangeOfS1 = strrindex.lowerBound..<strr.characters.endIndex   // part 2 (back)
        let S2 = String(strr[rangeOfS2].characters.reversed()) //    put together and reverse again
        let S1 = String(strr[rangeOfS1].characters.reversed())

        // here we have to remove search string
        let S1M1 = String(S1.characters.prefix(S1.characters.count - searchString.characters.count))

        return (S1M1, S2)
    }
    else {
        return (str, "")   // without splitting
    }
}

// split path of filename into all 3 part: directory name, filename without extension, extension (without dot)
// in one call (faster than the 3 functions separatly)
func splitFilename_(str: String) -> (directory: String, filenameOnly: String, ext: String) {
    let url = NSURL(fileURLWithPath: str)
    let path = url.path!

    // split path and filename
    let (directory, filenameExt) = revFindSplit_(str: path, searchString: "/")
    // split filename in filenameOnly and extension
    let (filenameOnly, ext) = revFindSplit_(str: filenameExt, searchString: ".")

    return (directory, filenameOnly, ext )
}

有什么办法可以显着加快速度吗? (也许使用库函数)

最佳答案

您可以减少整个代码:

func splitFilename(str: String) -> (directory: String, filenameOnly: String, ext: String) {
  let url = URL(fileURLWithPath: str)
  return (url.deletingLastPathComponent().path, url.deletingPathExtension().lastPathComponent, url.pathExtension)
}

关于 swift 3 : Fast file path separation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39674636/

相关文章:

java - 使用驼峰分割器分割列表列表

ios - Swift:ViewController 中的 TableView

javascript - 使用 vbscript 获取具有 javascript 的 Web 内容

.htaccess - SEO - 将子域移动到文件夹

emacs - 在 emacs 中拆分缓冲区后如何切换焦点?

python - 将文档逐行追加到列表中

android - 创建从 iOS (Swift) 到 Android(Kotlin) 的 Needle GaugeView

swift - 用于测试的 swift 嵌套函数选择器

swift - 如何对以工作表形式呈现的 NSViewController 的尺寸变化进行动画处理?

javascript - 在 JavaScript 中编码 URL?