Как мне отформатировать строку из строки с% @ в Swift - PullRequest
1 голос
/ 22 сентября 2019

Я использую Swift 4.2.Я получаю посторонние символы при форматировании одной строки (s1) из другой строки (s0) с использованием кода формата% @.

Я много раз искал детали форматирования строки, но нашел только частичные ответы, включая код во второй строке ниже.Мне нужно иметь возможность форматировать s1, чтобы я мог настроить вывод из процесса Swift.Я спрашиваю об этом, потому что я не нашел ответа при поиске способов отформатировать строку из строки.

Я попробовал следующие три утверждения:

let s0:[String] = ["abcdef"]

let s1:[String] = [String(format:"%@",s0)]

print(s1)
...

Вывод показан ниже.Здесь может быть неясно, но слева от строки abcdef есть четыре начальных пробела.

["(\n      abcdef\n)"]

Как мне отформатировать s1, чтобы он не содержал скобки, escape-символы \ n,а ведущие пробелы?

Ответы [ 3 ]

1 голос
/ 22 сентября 2019

Проблема здесь в том, что вы используете массив, но строку в s0.

, поэтому следующий индекс поможет вам.

let s0:[String] = ["abcdef"]

let s1:[String] = [String(format:"    %@",s0[0])]
0 голосов
/ 22 сентября 2019

При форматировании одной строки (s1) из другой строки (s0) я получаю посторонние символы ...

s0 не является строкой.Это массив строк (т. Е. Квадратные скобки [String] обозначают массив и совпадают с высказыванием Array<String>).И ваш s1 также является массивом, но тот, который имеет один элемент, значение которого является строковым представлением всего массива s0 строк.Это явно не то, что вы хотели.

Как мне отформатировать s1, чтобы он не включал скобки, экранирующие символы \n и начальные пробелы?

Вы получаете эти скобки, потому что s1 это массив.Вы получаете строку с \n и пробелами, потому что ее первое значение является строковым представлением еще одного массива, s0.

Итак, если вы просто пытаетесь отформатировать строку, s0, вы можете сделать:

let s0: String = "abcdef"
let s1: String = String(format: "It is ‘%@’", s0)

Или, если вы действительно хотите массив строк, вы можете вызвать String(format:) для каждого, используя функцию map:

let s0: [String] = ["abcdef", "ghijkl"]
let s1: [String] = s0.map { String(format: "It is ‘%@’", $0) }

Кстати, в приведенных выше примерах я не использовал строковый формат просто %@, потому что это вообще ничего не дает, поэтому я предположил, что вы форматировали строку по причине.


FWIW, мы обычно не используем String(format:) очень часто.Обычно мы выполняем «интерполяцию строк» ​​с \( и ):

let s0: String = "abcdef"
let s1: String = "It is ‘\(s0)’"
0 голосов
/ 22 сентября 2019

Избавьтесь от всех ненужных массивов и позвольте компилятору определить типы:

let s0 = "abcdef" // a string

let s1 = String(format:"- %@ -",s0) // another string

print(s1) // prints "- abcdef -"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...