Swift 3
let allowedQueryParamAndKey = NSCharacterSet.urlQueryAllowed.remove(charactersIn: ";/?:@&=+$, ")
paramOrKey.addingPercentEncoding(withAllowedCharacters: allowedQueryParamAndKey)
Swift 2.2 (Заимствование из Zaph и исправление для ключа запроса и значений параметров)
var allowedQueryParamAndKey = NSCharacterSet(charactersInString: ";/?:@&=+$, ").invertedSet
paramOrKey.stringByAddingPercentEncodingWithAllowedCharacters(allowedQueryParamAndKey)
Пример:
let paramOrKey = "https://some.website.com/path/to/page.srf?a=1&b=2#top"
paramOrKey.addingPercentEncoding(withAllowedCharacters: allowedQueryParamAndKey)
// produces:
"https%3A%2F%2Fsome.website.com%2Fpath%2Fto%2Fpage.srf%3Fa%3D1%26b%3D2%23top"
Это более короткая версия ответа Брайана Чена. Я предполагаю, что urlQueryAllowed
позволяет управляющим символам, через которые прекрасно, если они не составляют часть ключа или значения в строке запроса, в какой момент они должны быть экранированы.
Если вы расширите предупреждающее сообщение, вы найдете его причину
Кроме того, в Java 9 модуль может скрывать некоторые из своих классов, не экспортируя свои пакеты. [ 1110]
Если публичный API класса в экспортированном пакете ссылается на класс из неэкспортированного пакета, такой API бесполезен вне модуля.
blockquote>Причина, по которой такой API бесполезен, состоит в том, что никакой другой модуль не может создать экземпляр класса / access
Server
.Примечательно, что в дескриптор вашего модуля вы включили
opens com.money.heist.server.core.network to com.google.guice;
, который обеспечит доступ во время выполнения, но не во время компиляции (возможно, причина, по которой IntelliJ не имеет смысла) к типам
public
иprotected
в пакете, а также к элементамpublic
иprotected
этих типов к модулям, для которых они открыты.В связи с вышесказанным, если вы измените директиву
opens
наexports
, вы больше не увидите предупреждение от IntelliJ.