前言
学习中遇到了需要拿到应用沙盒目录的需求. 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!)
}
拖到你的项目里,拖进去,拖进去...