使用URL,更具体地说,是从其他已发现的URL逐步构建它们.在这样做时,我想继续使用NSURL对象而不是操纵NSStrings,只是为了从URL类中获得额外的健全性检查和特定于URL的方法.
不幸的是,似乎没有办法让以下内容加入到我希望的方式:
NSURL *base = [NSURL URLWithString:@"http://my.url/path"]; NSString *suffix = @"sub/path";
我想追加他们:
http://my.url/path/sub/path
但我能得到的最好的是:
NSURL *final = [NSURL URLWithString:suffix relativeToURL:base];
哪个修剪了基础上的路径,导致:
http://my.url/sub/path
有一个CoreFoundation函数可以做到:
CFURLRef CFURLCreateCopyAppendingPathComponent ( CFAllocatorRef allocator, CFURLRef url, CFStringRef pathComponent, Boolean isDirectory );
这似乎工作正常,但从ObjC到C的反复弹跳是令人不快和恼人的...我宁愿只是操纵字符串...我错过了什么?除了当然太挑剔了.:)
这是目标C - 如果NSURL不能满足您的需求,请添加扩展类别.
@interface NSURL ( Extensions )
- (NSURL*) urlByAppendingPathComponent: (NSString*) component;
@end
@implementation NSURL ( Extensions )
- (NSURL*) urlByAppendingPathComponent: (NSString*) component;
{
CFURLRef newURL = CFURLCreateCopyAppendingPathComponent( kCFAllocatorDefault, (CFURLRef)[self absoluteURL], (CFStringRef)component, [component hasSuffix:@"/"] );
return [NSMakeCollectable(newURL) autorelease];
}
@end
Run Code Online (Sandbox Code Playgroud)
然后:
*base = [NSURL URLWithString:@"http://my.url/path"];
*suffix = @"sub/path";
NSURL *final = [base urlByAppendingPathComponent:suffix];
NSLog( @"%@", final );
// displays http://my.url/path/sub/path
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1835 次 |
| 最近记录: |