Скажем, у меня есть строка здесь:
var fullName: String = "First Last"
Я хочу разбить строку базы на пустое пространство и присвоить значения их соответствующим переменным
var fullNameArr = // something like: fullName.explode(" ")
var firstName: String = fullNameArr[0]
var lastName: String? = fullnameArr[1]
Кроме того, иногда пользователи могут не иметь фамилию.
fullName.utf8.split( <utf-8 character code> )
произведений , а также (заменить.utf8
с.utf16
на UTF-16). Например, разделение+
может быть сделано с помощьюfullName.utf8.split(43)
Ответы:
Способ Swift заключается в использовании глобальной
split
функции, например так:со Swift 2
В Swift 2 использование split становится немного сложнее из-за введения внутреннего типа CharacterView. Это означает, что String больше не принимает протоколы SequenceType или CollectionType, и вместо этого вы должны использовать
.characters
свойство для доступа к представлению типа CharacterView экземпляра String. (Примечание: CharacterView принимает протоколы SequenceType и CollectionType).источник
split("a:b::c:", {$0 == ":"}, maxSplit: Int.max, allowEmptySlices: false)
.componentsSeparatedByString()
метод, если ваш разделитель длиннее одного символа. И, как ни крути, это, кlet (firstName, lastName) = split(fullName) {$0 == ' '}
сожалению, не работает.split("a,b;c,d") {$0 == "," || $0 == ";"}
илиsplit("a,b;c,d") {contains(",;", $0)}
Просто вызовите
componentsSeparatedByString
метод на вашемfullName
Обновление для Swift 3+
источник
NSString
(Swift автоматически меняет их при импортеFoundation
).[String]
) в Xcode 7.2.Самый простой способ сделать это - использовать componentsSeparatedBy:
Для Swift 2:
Для Swift 3:
источник
.componentsSeparatedByCharactersInSet(.whitespaceAndNewlineCharacterSet())
componentsSeparatedByString
иcomponentsSeparatedByCharactersInSet
Swift Dev. 4.0 (24 мая 2017 г.)
Новая функция
split
в Swift 4 ( бета ).Вывод:
Доступ к значениям:
Xcode 8.1 / Swift 3.0.1
Вот способ множественных разделителей с массивом.
Вывод:
источник
import Foundation
в класс, в котором вы это используете. #SavedYouFiveMinuteslet a="a,,b,c"
и используемая,a.split(separator: ",")
вы получаете массив, подобный["a", "b", c"]
по умолчанию. Это можно изменить, используя значениеomittingEmptySubsequences: false
true по умолчанию.Swift 4 или позже
Если вам просто нужно правильно отформатировать имя человека, вы можете использовать PersonNameComponentsFormatter .
редактировать / обновление:
Swift 5 или позже
Для простого разбиения строки не буквенными символами мы можем использовать новое свойство Character
isLetter
:источник
fullName.split { $0.isWhitespace }.map(String.init)
let words = line.split{ $0.isWhitespace }.map{ String($0)}
Спасибо @LeoDabus за вашу версию (в моем исходном комментарии отсутствовал код). Также я предлагаю перенести версию Swift 5 в начало ответа.В качестве альтернативы ответу WMios, вы также можете использовать
componentsSeparatedByCharactersInSet
, что может быть удобно, если у вас есть больше разделителей (пробел, запятая и т. Д.).С вашим конкретным вкладом:
Использование нескольких разделителей:
источник
,
или;
или любым другим разделителемSwift 4
источник
Проблема пробелов
Как правило, люди заново изобретают эту проблему и плохие решения снова и снова. Это пространство? "", а как насчет "\ n", "\ t" или какого-либо другого символа Юникода, который вы никогда не видели, в немалой степени, потому что он невидим. В то время как вы можете сойти с рук
Слабое решение
Если вам когда-нибудь понадобится расстаться с реальностью, посмотрите видео WWDC о строках или датах. Короче говоря, почти всегда лучше позволить Apple решить эту обычную задачу.
Надежное решение: используйте NSCharacterSet
Способ сделать это правильно, IMHO, заключается в использовании,
NSCharacterSet
поскольку, как указывалось ранее, ваш пробел может не соответствовать вашим ожиданиям, и Apple предоставила набор пробелов. Чтобы изучить различные предоставляемые наборы символов, ознакомьтесь с документацией разработчика NSCharacterSet от Apple, а затем, только тогда, дополните или создайте новый набор символов, если он не соответствует вашим потребностям.NSCharacterSet пробелы
источник
В Swift 4.2 и Xcode 10
Опция 1
Вариант 2
Вариант 3
Вариант 4
По документации Apple ...
источник
Swift 4 значительно облегчает разделение символов, просто используйте новую функцию разделения для строк.
Пример:
let s = "hi, hello" let a = s.split(separator: ",") print(a)
Теперь у вас есть массив с "привет" и "привет".
источник
Обновление для Swift 5 и самый простой способ
Это печатает,
Однако, если вы хотите отфильтровать пустую строку,
Вывод,
Но убедитесь, что фонд импортируется
источник
Свифт 3
AAA
,BBB
иCCC
.whitespaces
на.whitespacesAndNewlines
источник
Обновление Swift 4, Xcode 10 и iOS 12 на 100% работает
См . Документацию Apple здесь для получения дополнительной информации.
источник
Xcode 8.0 / Swift 3
Долгий путь:
источник
У меня был сценарий, в котором несколько управляющих символов могут присутствовать в строке, которую я хочу разделить. Вместо того, чтобы поддерживать их, я просто позволю Apple справиться с этой задачей.
Следующее работает с Swift 3.0.1 на iOS 10:
источник
Интересный случай я обнаружил, что
способ 1
Когда я использовал эту команду, чтобы отделить некоторый символ от данных, загруженных с сервера , он может разделяться во время тестирования в симуляторе и синхронизироваться с тестовым устройством, но не будет разделяться в приложении публикации и Ad Hoc.
Мне понадобилось много времени, чтобы отследить эту ошибку, она может быть проклята из какой-то версии Swift или из какой-либо версии iOS, или ни
Это также не касается HTML-кода, так как я пытаюсь выполнить stringByRemovingPercentEncoding, и он все еще не работает
дополнение 10/10/2015
в Swift 2.0 этот метод был изменен на
способ 2
Когда я использовал эту команду, она может разделить те же данные, которые загружаются с сервера правильно
Вывод, я действительно предлагаю использовать метод 2
источник
Большинство из этих ответов предполагает , что ввод содержит пробел - не белое пространство и единое пространство в этом. Если вы можете с уверенностью сделать это предположение, то принятый ответ (от Беннетта) довольно элегантный, а также метод, который я буду использовать, когда смогу.
Когда мы не можем сделать это предположение, более надежное решение должно охватывать следующие ситуации, которые большинство ответов здесь не учитывают:
\n
) и Windows (\r\n
)Чтобы покрыть эти случаи, это решение использует регулярное выражение для преобразования всех пробелов (включая повторяющиеся символы и символы новой строки Windows) в один пробел, обрезает, а затем разделяет на один пробел:
Свифт 3:
источник
Или без замыканий вы можете сделать это в Swift 2:
источник
Шаги по разбиению строки на массив в Swift 4.
Примечание: variableName.components (separaBy: "ключевое слово split")
источник
Swift 4
Вывод
источник
Допустим, у вас есть переменная с именем «Hello World», и если вы хотите разделить ее и сохранить в двух разных переменных, вы можете использовать так:
источник
Это дает массив разделенных частей напрямую
тогда вы можете использовать как это,
источник
Только
split
правильный ответ, здесь разница для более чем 2 пробелов.источник
Xcode 7.2 (7C68)
источник
Swift 2.2 Обработка ошибок и добавленная заглавная строка:
источник
Обработка строк все еще остается проблемой в Swift, и она постоянно меняется, как вы можете видеть из других ответов. Надеюсь, все успокоится, и это станет проще. Это способ сделать это с текущей версией 3.0 Swift с несколькими символами-разделителями.
Свифт 3:
источник
Я искал слабое разбиение, такое как PHP,
explode
где пустые последовательности включены в результирующий массив, это работало для меня:Вывод:
источник
Это снова изменилось в бета-версии 5. Weee! Теперь это метод на CollectionType
Старый:
Новое:
Примечания к выпуску яблок
источник
Для Swift 2, XCode 7.1:
источник
Вот алгоритм, который я только что построил, который будет делить
String
любойCharacter
массив из массива, и если есть желание сохранить подстроки с разделенными символами, можно установитьswallow
параметр вtrue
.Xcode 7.3 - Swift 2.2:
Пример:
источник