Swift:如何在路径String中扩展波形符

Kam*_*xom 9 path nsfilemanager tilde-expansion home-directory swift

如何在Swift中使用波浪号扩展路径String?我有一个类似的字符串"~/Desktop",我想在NSFileManager方法中使用此路径,这需要将波浪号扩展为"/Users/<myuser>/Desktop".

(这有明显的问题说明问题并不存在,这应该是很容易玛丽萨.有些相似但不令人满意的问题是不能使路径在斯威夫特的文件,简单的方法来读取使用雨燕?本地文件,波浪线的基础在Objective-C的路径)

Kam*_*xom 26

Tilde扩张

斯威夫特1

"~/Desktop".stringByExpandingTildeInPath
Run Code Online (Sandbox Code Playgroud)

斯威夫特2

NSString(string: "~/Desktop").stringByExpandingTildeInPath
Run Code Online (Sandbox Code Playgroud)

斯威夫特3

NSString(string: "~/Desktop").expandingTildeInPath
Run Code Online (Sandbox Code Playgroud)

主页目录

另外,您可以像这样获取主目录(返回String/ String?):

NSHomeDirectory()
NSHomeDirectoryForUser("<User>")
Run Code Online (Sandbox Code Playgroud)

在Swift 3和OS X 10.12中,也可以使用它(返回一个URL/ URL?):

FileManager.default().homeDirectoryForCurrentUser
FileManager.default().homeDirectory(forUser: "<User>")
Run Code Online (Sandbox Code Playgroud)

编辑:在Swift 3.1中,这改变了 FileManager.default.homeDirectoryForCurrentUser


Wil*_*lC7 5

返回字符串:

func expandingTildeInPath(_ path: String) -> String {
    return path.replacingOccurrences(of: "~", with: FileManager.default.homeDirectoryForCurrentUser.path)
}
Run Code Online (Sandbox Code Playgroud)

返回网址:

func expandingTildeInPath(_ path: String) -> URL {
    return URL(fileURLWithPath: path.replacingOccurrences(of: "~", with: FileManager.default.homeDirectoryForCurrentUser.path))
}
Run Code Online (Sandbox Code Playgroud)

如果操作系统低于 10.12,请更换

FileManager.default.homeDirectoryForCurrentUser
Run Code Online (Sandbox Code Playgroud)

URL(fileURLWithPath: NSHomeDirectory()
Run Code Online (Sandbox Code Playgroud)