Как использовать substringToIndex в Swift? [дубликат]
этот вопрос уже есть ответ здесь:
- Тип Строки.Индекс 'не соответствует протоколу 'IntegerLiteralConvertible' 3 ответы
Я получаю ошибку компилятора в этой строке:
UIDevice.currentDevice().identifierForVendor.UUIDString.substringToIndex(8)
Тип '.Индекс 'не соответствует протоколу 'IntegerLiteralConvertible'
мое намерение состоит в том, чтобы получить подстроку, но как?
1 ответ:
В Swift,
String
индексация уважает кластеры графем, иIndexType
- это неInt
. У вас есть два варианта - привести строку (ваш UUID) к NSString и использовать ее как "раньше" или создать индекс для n-го символа.как показано ниже :
однако метод радикально изменился между версиями Swift. Читать для более поздних версий...
Swift 1
let s: String = "Stack Overflow" let ss1: String = (s as NSString).substringToIndex(5) // "Stack" //let ss2: String = s.substringToIndex(5)// 5 is not a String.Index let index: String.Index = advance(s.startIndex, 5) let ss2:String = s.substringToIndex(index) // "Stack"
CMD-Click на
substringToIndex
смущенно ведет вас кNSString
определение, однако CMD-нажмите наString
и вы найдете следующее:extension String : Collection { struct Index : BidirectionalIndex, Reflectable { func successor() -> String.Index func predecessor() -> String.Index func getMirror() -> Mirror } var startIndex: String.Index { get } var endIndex: String.Index { get } subscript (i: String.Index) -> Character { get } func generate() -> IndexingGenerator<String> }
Swift 2
Как отмечает комментатор @DanielGalaskoadvance
теперь ситуация изменилась...let s: String = "Stack Overflow" let ss1: String = (s as NSString).substringToIndex(5) // "Stack" //let ss2: String = s.substringToIndex(5)// 5 is not a String.Index let index: String.Index = s.startIndex.advancedBy(5) // Swift 2 let ss2:String = s.substringToIndex(index) // "Stack"
Swift 3
В Swift 3 он снова изменился:let s: String = "Stack Overflow" let ss1: String = (s as NSString).substring(to: 5) // "Stack" let index: String.Index = s.index(s.startIndex, offsetBy: 5) var ss2: String = s.substring(to: index) // "Stack"
Swift 4
В Swift 4, Еще одно изменение:let s: String = "Stack Overflow" let ss1: String = (s as NSString).substring(to: 5) // "Stack" let index: String.Index = s.index(s.startIndex, offsetBy: 5) var ss3: Substring = s[...index] // "Stack" var ss4: String = String(s[...index]) // "Stack"