【发布时间】:2010-12-30 08:35:43
【问题描述】:
是否有任何标准对象或函数来解析 NSURL 的组件?显然我可以写一个,但为什么要重新发明轮子呢?
[NSURL path] 将返回一个 NSString 就像 "argX=x&argY=y&argZ=z"
我宁愿找回的是一本包含{@"argX" => @"x", @"argY" => @"y", @"argZ" = @"z"}的字典
对于返回像“/partA/partB/partC”这样的字符串的路径,我宁愿得到一个结构为{[0] => @"partA", [1] => @"partB", [2] => @"partC"}的数组
我知道这是一个非常具体的问题,但它似乎是很多人想要的。
这是适用于 iOS 的!显然 NSURL 在 macOS 上有不同的功能。
【问题讨论】:
-
好问题。你的意思是:如果 URL 是“/partA/partB/partC”,你想要“0 => partA, 1=> partB, 2=>partC”。如果 URL 是“/foo?partA=A&partB=B”,您需要“partA => A, partB => B”。如果 URL 是“/partA/partB/partC?foo=bar&ooga=booga”怎么办?在一个示例中,识别相关实体所需的重要信息在查询字符串中传递......在另一个示例中,标识信息在路径本身中以 rest 样式传递。
-
我的意思是我想分别解析路径和查询。它不应该是结合这两个任务的一个功能。请参阅我在下面发布的代码以进行说明。如果有人回答现有的实现,我仍然很乐意接受。
-
要记住的一点是,这是一个完全有效的查询字符串:“x=1&x=0&x=foo”,因此 NSDictionary 可能不是最好的表示(除非您使用数组作为值)。
-
@n8gray - 你说得对,我在下面的回答不涉及重复值。不过,我会避免在任何现实世界场景中出现像瘟疫这样的重复值,因为许多服务器(例如 PHP 服务器)最终将只有一个 x...x=>"foo" 的值,就像我的脚本一样。然而,PHP 将 用“x[]=1&x[]=foo”构建一个数组,而我的回答不会这样做。如果左侧参数名称以“[]”结尾,那么扩展我的示例以构建数组应该是一个简单的练习,所以我将把它留给需要它的任何人添加。谢谢!
标签: ios objective-c cocoa-touch nsurl