В этом контексте ни метод .componentsSeparatedByString(" ")
, ни метод characters.split(" ")
не являются «наилучшим подходом». Оба эти метода пройдут весь объект String
, и в результате получится String
массив. Только после вычисления массива мы извлекаем первую запись этого массива. Если мы рассматриваем огромную строку, в этом контексте это совершенно необязательно, и это приведет к ненужным накладным расходам.
Вместо этого для огромной строки, следующий метод предпочесть:
let firstDateEntryFast = date.substringToIndex((date.rangeOfString(" ")?.first)!)
Это будет искать индекс первого вхождения " "
, а затем возвращает подстроку от начала исходной строки вверх только к первому вхождению. I.e., он никогда не будет исследовать или использовать исходную (в этом контексте: предполагаемую большую) строку за пределами точки первой ошибки " "
.
Следует отметить, однако, что из-за разворота силы (оператора (!)), Это приведет к сбою во время выполнения, если строка не содержит никакого экземпляра " "
. Таким образом, чтобы оставаться в безопасности, и следовать за дополнительную конвенцию Swift, использовать его в if let
пункте:
if let myRange = date.rangeOfString(" ") {
let firstDateEntryFast = date.substringToIndex(myRange.first!)
// at this point, you know myRange is non-empty, and hence, .first can be
// force-unwrapped
}
else {
let firstDateEntryFast = date
// no " " separation, unexpected? -> action
}
Как и в моей первой версии ответа, split
может быть использован в качестве альтернативы (по сравнению с componentsSeparatedByString
):
var date = "1,340d 1h 15m 52s"
let dateAsArray = date.characters.split(" ").map{ String($0) }
let firstDateEntry = dateAsArray[0]
в качестве альтернативы, пропустить хранение их в массиве и непосредственно получить первую запись,
var date = "1,340d 1h 15m 52s"
let firstDateEntryDirectly = String(date.characters.split(" ")[0])
stringbytrimming символов –
@UmaMadhavi Я не хочу чтобы избавиться от всех те пространства. Я хочу получить символы перед первым пробелом. – senty
use (date.componentSeparatedByString ("") as! NSArray) [0] –