Имеет ли строка kotlin такой программист, как Obj c stati c NSString kUrl = @ "users /% @ / profile"; - PullRequest
0 голосов
/ 03 апреля 2020

Я новичок в kotlin, я столкнулся с проблемой, я хочу определить несколько константных строк URL. И большинство константных строк содержат некоторые переменные внутри строки, например: "/ users / 24 / profile". В Obj c я могу объявить URL-адрес

static NSString kUrl = @"/users/%@/profile";

, и я могу дать значение% @ при его использовании, например

[NSString stringWithFormat:kUrl,24]

Но в kotlin я не не знаю, есть ли что-то подобное. Что я знаю в kotlin:

const val kUrl = "/users/{0}/profile"

и делаю

kUrl.replace("{0}",24)

при использовании. если будет много параметров, я определю много заполнителей {0}, {1} ...., это может быть сложно.

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 03 апреля 2020

Вы можете использовать интерполяцию строк для архивирования так же, как в Obj- C:

val userId = 24
const val kUrl = "/users/$userId/profile"
const val kUrl = "/profile/$firstname/$surname"

Но это не безопасный способ создания URL. Скажем, ваш firstname оказался "na /? / Me" - это нарушило бы структуру URL. Чтобы избежать этой проблемы, строки должны быть закодированы , чтобы их можно было безопасно поместить в URL

Для архивации, так что рассмотрите URLEncoder вспомогательный класс

val valueEncoded = URLEncoder.encode (value , "utf-8");

тогда его можно безопасно подключить к строке URL:

const val kUrl = "/users/$valueEncoded/"

или можно выполнить кодирование параметров пути вместо

const val kUrl = "/users/${URLEncoder.encode(value, "utf-8")}/"

Kotlin way

Если вы заметили, что вам нужно часто преобразовывать параметры, можно создать функцию расширения в ограниченном объеме, где это необходимо, например:

fun String.toUrlSafe() = URLEncoder.encode(value, "utf-8")

// Use
val url = "/path/${param1.toUrlSafe()}/${param2.toUrlSafe()}/something"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...