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:

在 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,并且可以在 NSURLNSURLComponents 对象之间进行转换。

你是对的,你正在寻找 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 将压缩其中之一)。