class URL 在 iOS Objective-C 中的建筑物存在什么原生 class?
What native class exists for URL building in iOS Objective-C?
在许多框架(或许多现代编程语言的语言核心)中,有一些工具可以轻松构建 URLs。例如,假设您有一个架构 (http
)、一个域 (www.example.com
)、一个 API 基本路径 (/api/v1/
),现在您想要生成多个 URLs 用于不同的 API endpionts:
http://www.example.com/api/v1/customers
http://www.example.com/api/v1/customers/1
http://www.example.com/api/v1/orders
http://www.example.com/api/v1/orders/1
- 等等
在 Android 上可以使用 Uri.Builder
:
public MyClass()
{
this.builder = new Uri.Builder()
.scheme("http")
.authority("www.exmaple.com")
.path("/api/v1/");
}
public void customerList()
{
request(this.builder.appendPath("customers").build().toString());
}
public void getCustomer(int id)
{
request(this.builder.appendPath("customers/" + id).build().toString());
}
public void orderList()
{
request(this.builder.appendPath("orders").build().toString());
}
public void getOrder(int id)
{
request(this.builder.appendPath("orders/" + id).build().toString());
}
为了这个目的,iOS 中存在什么推论 class?一些快速谷歌搜索无法找到答案,我在 Whosebug 上找到的只是 [Building up a URL in Objective-C 问题),它只使用字符串格式。理想情况下,我宁愿避免字符串格式化解决方案,因为如果有人为域键入 www.example.com/
(带有额外的斜线),它可能会中断,因为没有上下文也没有 class 验证输入.
我想 NSURL
可能有一些我正在寻找的功能,但不知道如何正确使用它。 Apple's documentation on the class 提到 URL 拥有方案、用户、密码、主机、端口等(我希望来自适当的 URL 构建器的所有成员)但没有提及如何设置它们。
您正在寻找 NSURLComponents
,您可以从组成部分构造 URL,并且可以在 NSURL
和 NSURLComponents
对象之间进行转换。
你是对的,你正在寻找 NSURL class,它处理所有 Mac 平台的 URL。您使用它的方式或多或少与您在 Android 代码中的方式相同:
NSURL * url = [NSURL URLWithString:@"http://www.example.com/api/v1"];
NSURL * urlCust1 = [url URLByAppendingPathComponent:@"customers"];
NSURL * urlCust2 = [url URLByAppendingPathComponent:[NSString stringWithFormat:@"customers/%@",Cid]];
NSURL * urlOrder = [url URLByAppendingPathComponent:@"orders"];
NSURL * urlorderFull = [urlOrder URLByAppendingPathComponent:Oid];
NSURL * basePath = [[url URLByDeletingLastPathComponent] URLByDeletingLastPathComponent];
NSURL 会处理斜杠分隔符,因此您无需跟踪它们(如果您在字符串中忘记了它,NSURL 会添加它;如果您在接收器中有结束斜杠和起始斜杠新组件中的斜线,NSURL 将压缩其中之一)。
在许多框架(或许多现代编程语言的语言核心)中,有一些工具可以轻松构建 URLs。例如,假设您有一个架构 (http
)、一个域 (www.example.com
)、一个 API 基本路径 (/api/v1/
),现在您想要生成多个 URLs 用于不同的 API endpionts:
http://www.example.com/api/v1/customers
http://www.example.com/api/v1/customers/1
http://www.example.com/api/v1/orders
http://www.example.com/api/v1/orders/1
- 等等
在 Android 上可以使用 Uri.Builder
:
public MyClass()
{
this.builder = new Uri.Builder()
.scheme("http")
.authority("www.exmaple.com")
.path("/api/v1/");
}
public void customerList()
{
request(this.builder.appendPath("customers").build().toString());
}
public void getCustomer(int id)
{
request(this.builder.appendPath("customers/" + id).build().toString());
}
public void orderList()
{
request(this.builder.appendPath("orders").build().toString());
}
public void getOrder(int id)
{
request(this.builder.appendPath("orders/" + id).build().toString());
}
为了这个目的,iOS 中存在什么推论 class?一些快速谷歌搜索无法找到答案,我在 Whosebug 上找到的只是 [Building up a URL in Objective-C 问题),它只使用字符串格式。理想情况下,我宁愿避免字符串格式化解决方案,因为如果有人为域键入 www.example.com/
(带有额外的斜线),它可能会中断,因为没有上下文也没有 class 验证输入.
我想 NSURL
可能有一些我正在寻找的功能,但不知道如何正确使用它。 Apple's documentation on the class 提到 URL 拥有方案、用户、密码、主机、端口等(我希望来自适当的 URL 构建器的所有成员)但没有提及如何设置它们。
您正在寻找 NSURLComponents
,您可以从组成部分构造 URL,并且可以在 NSURL
和 NSURLComponents
对象之间进行转换。
你是对的,你正在寻找 NSURL class,它处理所有 Mac 平台的 URL。您使用它的方式或多或少与您在 Android 代码中的方式相同:
NSURL * url = [NSURL URLWithString:@"http://www.example.com/api/v1"];
NSURL * urlCust1 = [url URLByAppendingPathComponent:@"customers"];
NSURL * urlCust2 = [url URLByAppendingPathComponent:[NSString stringWithFormat:@"customers/%@",Cid]];
NSURL * urlOrder = [url URLByAppendingPathComponent:@"orders"];
NSURL * urlorderFull = [urlOrder URLByAppendingPathComponent:Oid];
NSURL * basePath = [[url URLByDeletingLastPathComponent] URLByDeletingLastPathComponent];
NSURL 会处理斜杠分隔符,因此您无需跟踪它们(如果您在字符串中忘记了它,NSURL 会添加它;如果您在接收器中有结束斜杠和起始斜杠新组件中的斜线,NSURL 将压缩其中之一)。