Я знаю, как программно сделать это, но я уверен, что есть встроенный способ ...
Каждый язык, который я использовал, имеет своего рода текстовое представление по умолчанию для коллекции объектов, которое он будет выдавать при попытке объединить массив со строкой или передать его в функцию print () и т. Д. Поддерживает ли язык Apple Swift есть встроенный способ легко превратить массив в строку, или мы всегда должны быть явными при строковом массиве?
array.description
или если вы хотите специальный разделительarray.joined(separator: ",")
Ответы:
Если массив содержит строки, вы можете использовать
String
«Sjoin
метод:В Swift 2 :
Это может быть полезно, если вы хотите использовать определенный разделитель (перенос, пробел, запятая и т. Д.).
В противном случае вы можете просто использовать
description
свойство, которое возвращает строковое представление массива:Подсказка: любой объект, реализующий
Printable
протокол, имеетdescription
свойство. Если вы применяете этот протокол в своих собственных классах / структурах, вы также делаете их удобными для печатиВ Свифт 3
join
становитсяjoined
примером[nil, "1", "2"].flatMap({$0}).joined()
joinWithSeparator
становитсяjoined(separator:)
(доступно только для Array of Strings)В Swift 4
источник
"-".join(array)
больше не доступен в Swift 2, Xcode 7 Beta 6, попробуйте использоватьarray.joinWithSeparator("-")
joinWithSeparator
доступно только для массива строк. Если у вас есть массив других объектов, используйтеmap
сначала. Например,[1, 2, 3].map({"\($0)"}).joinWithSeparator(",")
С Swift 5, в соответствии с вашими потребностями, вы можете выбрать один из следующих примеров кодов Playground, чтобы решить вашу проблему.
Превращение массива
Character
s вString
без разделителя:Превращение массива
String
s вString
без разделителя:Превращение массива
String
s вString
разделитель между словами:Превращение массива
String
s вString
разделитель с символами:Превращение массива
Float
s в aString
с разделителем между числами:источник
try JSONDecoder().decode([Int].self, from: Data(string.utf8))
Swift 2.0 Xcode 7.0 beta 6 и выше использует
joinWithSeparator()
вместоjoin()
:joinWithSeparator
определяется как расширение наSequenceType
источник
Свифт 3
источник
В Swift 4
источник
Так как никто не упомянул снижение, вот оно:
В духе функционального программирования 🤖
источник
[0,1,1,0].map{"\($0)"}.reduce("",+)
. 😉[0,1,1,0].map(String.init).joined()
Чтобы изменить массив необязательных / необязательных строк
Здесь flatMap , compactMap пропускает значения nil в массиве и добавляет другие значения, чтобы получить объединенную строку.
источник
Мой работает на NSMutableArray с компонентами JoinedByString
источник
В Swift 2.2 вам, возможно, придется преобразовать ваш массив в NSArray, чтобы использовать componentJoinedByString (",")
источник
Если вы хотите выбросить пустые строки в массиве.
Если вы также хотите отфильтровать нулевые значения:
источник
Результат будет >>> Mani Singh iOS Developer
источник
Свифт, эквивалентный тому, что вы описываете - это интерполяция строк. Если вы думаете о таких вещах, как JavaScript
"x" + array
, то эквивалент в Swift есть"x\(array)"
.Как общее примечание, есть важная разница между интерполяцией строк и
Printable
протоколом. Только определенные классы соответствуютPrintable
. Каждый класс может быть как-то интерполирован. Это полезно при написании универсальных функций. Вам не нужно ограничивать себя вPrintable
занятиях.источник
Вы можете распечатать любой объект, используя функцию печати
или использовать
\(name)
для преобразования любого объекта в строку.Пример:
источник
Создать расширение для
Array
:источник
Разделитель может быть плохой идеей для некоторых языков, таких как иврит или японский. Попробуй это:
Для других типов данных соответственно:
источник
если у вас есть список строкового массива, то конвертируйте в Int
это даст вам строковое значение
источник
для любого типа элемента
источник
Попробуй это:
источник
ДЛЯ SWIFT 3:
источник
Если вы спрашиваете что-то вроде этого: tobeFormattedString = ["a", "b", "c"] Output = "abc"
String(tobeFormattedString)
источник
String
не имеет инициализатора, способного сделать это. Либо вы используете пользовательское расширение или стороннюю библиотеку, либо вы просто ошибаетесь.