Строка и указатель в Свифт 3

Вот часть моего кода:

let separator = anyWord.indexOf("-")!
if (separator >= 0) {
let res = anyWord[anyWord.characters.index(after: separator)..<anyWord.endIndex] //get an error
//some code
}

Я получаю сообщение об ошибке в части 'let res' - введите 'String!' не имеет подписчиков

если я сделаю:

let separator = anyWord.indexOf("-")!
let subStartIndex = anyWord.characters.index(after: separator)

расширение для строки:

extension String {
    public func indexOf(_ char: Character) -> Int! {
        if let idx = self.characters.index(of: char) {
            return self.characters.distance(from: self.startIndex, to: idx)
        }
        return Const.INVALID_VALUE
    }

Я получаю ошибку:

Строка не может быть проиндексирована с помощью Int, она имеет элементы переменного размера

3 ответа

Решение

Вы думаете, что слишком сложно, это довольно легко в Swift 3 с помощью range(of а также upperBound

let anyWord = "asdghf-fkgjh"
if let separator = anyWord.range(of:"-") {
   let res = anyWord.substring(from: separator.upperBound)
   //some code
}

Мне нравится "чистое" быстрое решение (не требуется фундамент)

let anyWord = "asdghf-fkgjh-blablabla--bla"
anyWord.characters.split(separator: "-").forEach { print( String($0)) }

это печатает

asdghf
fkgjh
blablabla
bla

Приведите это к последовательности

let test: String
test = "Test-Word"
if let separatorWord = anyWord.range(of: "-") 
{
let word = anyWord.substring(from: anyWord.index(after:   
separatorWord.lowerBound))
print(word)
}
Другие вопросы по тегам