2016-02-08 5 views
2
let word = "sample string" 

let firstLetter = Character(word.substringToIndex(advance(word.startIndex,1)).uppercaseString) 

Я получил приведенный выше пример из учебника. Может ли кто-нибудь знать, что они подразумевают под «продвижением», и какая разница между «substringToIndex» и «substringWithRange».ключевое слово 'advance' в swift?

ответ

5

Этот синтаксис advance относится к Swift 1, теперь он отличается.

Свифта 2

let firstLetter = Character(word.substringToIndex(word.startIndex.advancedBy(1)).uppercaseString) 

Метод advancedBy перемещает текущий индекс вдоль струны.

С substringToIndex вы разрезаете часть строки, начиная с начала строки, и заканчивая индексом, определенным advancedBy.

Здесь вы продвигаетесь на 1 в строке, поэтому это означает, что substringToIndex получит первый символ из строки.

Swift 3

Синтаксис снова изменился, теперь мы используем substring и index со смещением:

let firstLetter = Character(word.substring(to: word.index(word.startIndex, offsetBy: 1)).uppercased()) 
1

substringToIndex

Возвращает новую строку, содержащую символы приемника до, , но не включая, тот, который имеет заданный индекс.

Возвращаемое значение Новая строка, содержащая символы приемника, но не включенные, одна в anIndex. Если aIndex равен , равному длине строки, возвращает копию получателя.

substringWithRange

Возвращает объект, содержащий строку символов приемника, которые лежат в пределах заданного диапазона.

Возвращаемое значение Строковый объект, содержащий символы приемника, которые лежат внутри aRange.

Особые соображения Этот метод определяет все недопустимые диапазоны (включая отрицательные длины). Для приложений, связанных с , против OS X v10.6 и более поздних версий, эта ошибка вызывает исключение; для приложений , связанных с более ранними версиями, эта ошибка вызывает предупреждение , которое отображается только один раз на выполнение приложения.

Для получения дополнительной информации подробно, вы можете получить в Apple NSString Class Reference

1

Ваш учебник устарел. advance устарел в Swift 2. Строки в Swift не могут быть случайным образом доступны, т. Е.для получения первой буквы строки нет word[0]. Вместо этого вам необходимо указать объект Index, чтобы указать положение символа. Вы можете создать этот индекс, начиная с другим индексом, как правило, в startIndex или endIndex строки, а затем продвигать его к характеру вы хотите:

let word = "sample string" 
let index0 = word.startIndex    // the first letter, an 's' 
let index6 = word.startIndex.advancedBy(6) // the seventh letter, the whitespace 

substringToIndex принимает все символы слева от строки, останавливая перед тем в указатель, указанный вами. Эти два эквивалентны:

print("'\(word.substringToIndex(index6))'") 
print("'\(word[index0..<index6])'") 

Оба печати 'sample'

Смежные вопросы