NSString.appendingPathComponent(_:) 在 Linux 上无法正常工作
NSString.appendingPathComponent(_:) not working correctly on Linux
Apple 的 NSString.appendingPathComponent(_:) 文档描述:
该方法在 macOS 上按预期工作,但在 linux 上失败。有什么解决方法吗?这是功能还是错误?我们可以在哪里报告?
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"))
这绝对是一个错误,因为它与文档背道而驰。其中之一需要修复,我认为这是代码。打开一个新的 bug 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
的扩展形式
Apple 的 NSString.appendingPathComponent(_:) 文档描述:
该方法在 macOS 上按预期工作,但在 linux 上失败。有什么解决方法吗?这是功能还是错误?我们可以在哪里报告?
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"))
这绝对是一个错误,因为它与文档背道而驰。其中之一需要修复,我认为这是代码。打开一个新的 bug 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