NSString.appendingPathComponent(_ :)在Linux上无法正常工作

时间:2017-07-29 21:59:41

标签: swift linux nsstring

Apple的NSString.appendingPathComponent(_:)文档描述了:

该方法在macOS上按预期工作,但在linux上失败。有没有解决方法?这是一个功能还是错误?我们在哪里可以举报?

Run online

import Foundation


extension String {
    func appendingPathComponent(_ str: String) -> String {
        return NSString(string: self).appendingPathComponent(str)
    }
}

// prints correctly: "/tmp/scratch.tiff"
print("/tmp".appendingPathComponent("scratch.tiff"))

// should print: "/tmp/scratch.tiff" but prints "/tmp//scratch.tiff"
print("/tmp/".appendingPathComponent("scratch.tiff"))

// prints correctly: "/scratch.tiff"
print("/".appendingPathComponent("scratch.tiff"))

// should print: "scratch.tiff" but prints "/scratch.tiff"
print("".appendingPathComponent("scratch.tiff")) 

1 个答案:

答案 0 :(得分:2)

这绝对是一个错误,因为它与文档背道而驰。其中一个需要修复,我认为这是代码。打开一个新错误here

使用Swift,Apple从String删除了所有这些路径API,这在我看来是不合适的。 Apple执行路径操作的首选方法是使用URL

print(URL(fileURLWithPath: "/tmp").appendingPathComponent("scratch.tiff").path)
print(URL(fileURLWithPath: "/tmp/").appendingPathComponent("scratch.tiff").path)
print(URL(fileURLWithPath: "/").appendingPathComponent("scratch.tiff").path)
print(URL(fileURLWithPath: "").appendingPathComponent("scratch.tiff").path)

最后一行的行为与NSString不同。它将scratch.tiff附加到当前目录。换句话说,它是./scratch.tiff

的扩展形式