前言
學習中遇到了需要拿到應用沙盒目錄的需求. oc中的寫法如下:
@implementation NSString (Path)
//追加文檔目錄
- (NSString *)appendDocumentPath {
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:self.lastPathComponent];
}
//追加緩存目錄
- (NSString *)appendCachePath {
return [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:self.lastPathComponent];
}
//追加臨時目錄
- (NSString *)appendTempPath {
return [NSTemporaryDirectory() stringByAppendingPathComponent:self.lastPathComponent];
}
swift
//文檔目錄
let documentPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString
//緩存目錄
let cachePath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString
//臨時目錄
let tempPath = NSTemporaryDirectory() as NSString
正文
由于需求是根據頭像的地址緩存圖片, 所以要拿到頭像地址中http://xxx.com/xxx.png 中最后一個 /
后面的內容作為 key 來保存
OC中使用了 self.lastPathComponent
來拿到(這里的self
是一個NSString
)
由于swift中字符串默認是 String 類型,而不是 NSString.所以默認沒有上述方法. 解決這個問題方法有2種:
1. 全部轉成 OC 字符串
把path
和頭像的地址http://xxx.com/xxx.png
全部轉成NSString
然后根據 OC 的語法去做
2. 使用public func componentsSeparatedByString(separator: String) -> [String]
方法來分割.
這個方法會根據你指定的分隔符,來返回一個數組, 這個數組中包含了根據分隔符分割的幾部分.
let filePath = self.documentPath.stringByAppendingPathComponent(iconAddress!.componentsSeparatedByString("/").last!)
同樣能解決這個問題.
干貨在這
//返回文件的沙盒目錄
func docuPath(URLString: String) -> String {
let documentPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString
//app.icon!.componentsSeparatedByString("/").last! -> 根據 "/"來拆分 得到一個數組.拿到最后一個部分
return documentPath.stringByAppendingPathComponent(URLString.componentsSeparatedByString("/").last!)
}
拖到你的項目里,拖進去,拖進去...