Какой собственный класс существует для построения URL в iOS Objective-C? - PullRequest
0 голосов
/ 05 июля 2019

Во многих средах (или ядро ​​языка во многих современных языках программирования) есть некоторый инструмент для простого создания URL.Например, предположим, что у вас есть схема (http), домен (www.example.com), базовый путь API (/api/v1/), и теперь вы хотите сгенерировать несколько URL-адресов для разных конечных объектов API:

Вкл.В 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 для этой цели?Некоторый быстрый поиск в Google не смог найти ответ, и все, что я нашел в StackOverflow, было [ Создание URL-адреса в вопросе Objective-C ), в котором просто используется форматирование строки.В идеале я бы предпочел избегать решения для форматирования строк, поскольку оно могло бы сломаться, если бы кто-то, например, набрал www.example.com/ для домена (с дополнительной косой чертой), потому что нет контекста и класса, проверяющего ввод.

Я бы предположил NSURL, вероятно, имеет некоторую функциональность, такую ​​как то, что я ищу, но не мог понять, как правильно ее использовать. В документации Apple по классу упоминается, что URL-адрес обладает схемой, пользователем, паролем, хостом, портом и т. Д. (Всех членов, которых я ожидаю от правильного компоновщика URL-адресов), но не упоминается, как установитьих.

Ответы [ 2 ]

2 голосов
/ 05 июля 2019

Вы ищете NSURLComponents, вы можете создавать URL-адреса из составных частей и конвертировать между NSURL и NSURLComponents объектами.

0 голосов
/ 05 июля 2019

Вы правы, вы ищете NSURL класс , который обрабатывает URL для всех платформ Mac. И вы используете его более или менее так же, как в коде 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 раздавит один из них).

...