Подтвердить что ты не робот

Как добавить символ в определенный индекс в строке в Swift

У меня есть строка типа Swift:

var stringts:String = "3022513240"

Если я хочу изменить его на строку примерно так: "(302)-251-3240", я хочу добавить разделы в индекс 0, как это сделать?

В Objective-C это делается следующим образом:

 NSMutableString *stringts = "3022513240";
 [stringts insertString:@"(" atIndex:0];

Как это сделать в Swift?

4b9b3361

Ответ 1

Если вы объявляете его как NSMutableString то это возможно, и вы можете сделать это следующим образом:

let str: NSMutableString = "3022513240)"
str.insert("(", at: 0)
print(str)

Выход:

(3022513240)

РЕДАКТИРОВАТЬ:

Если вы хотите добавить при запуске:

var str = "3022513240)"
str.insert("(", at: str.startIndex)

Если вы хотите добавить символ в последний индекс:

str.insert("(", at: str.endIndex)

И если вы хотите добавить по определенному индексу:

str.insert("(", at: str.index(str.startIndex, offsetBy: 2))

Ответ 2

Swift 3

Используйте собственный подход Swift:

var welcome = "hello"

welcome.insert("!", at: welcome.endIndex) // prints hello!
welcome.insert("!", at: welcome.startIndex) // prints !hello
welcome.insert("!", at: welcome.index(before: welcome.endIndex)) // prints hell!o
welcome.insert("!", at: welcome.index(after: welcome.startIndex)) // prints h!ello
welcome.insert("!", at: welcome.index(welcome.startIndex, offsetBy: 3)) // prints hel!lo

Если вам интересно узнать больше о Strings и производительности, посмотрите @ ниже.

Ответ 3

var myString = "hell"
let index = 4
let character = "o" as Character

myString.insert(
    character, at:
    myString.index(myString.startIndex, offsetBy: index)
)

print(myString) // "hello"

Осторожно: убедитесь, что index больше или равен размеру строки, иначе вы получите сбой.

Ответ 4

var phone = "+9945555555"

var indx = phone.index(phone.startIndex, offsetBy: 4)

phone.insert("-", at: indx)

index = phone.index(phone.startIndex, offsetBy: 7)

phone.insert("-", at: indx)

//+ 994-55-55555

Ответ 5

Вы не можете, потому что в строковых индексах Swift (String.Index) определяется в терминах кластеров Unicode grapheme, так что он прекрасно обрабатывает все элементы Unicode. Таким образом, вы не можете напрямую построить String.Index из индекса. Вы можете использовать advance(theString.startIndex, 3), чтобы посмотреть на кластеры, составляющие строку, и вычислить индекс, соответствующий третьему кластеру, но осторожно, это операция O (N).

В вашем случае, вероятно, проще использовать операцию замены строк.

Подробнее о этом сообщении в блоге.

Ответ 6

Для отображения 10-значного номера телефона в формате номера США (###) ### - #### SWIFT 3

func arrangeUSFormat(strPhone : String)-> String {
    var strUpdated = strPhone
    if strPhone.characters.count == 10 {
        strUpdated.insert("(", at: strUpdated.startIndex)
        strUpdated.insert(")", at: strUpdated.index(strUpdated.startIndex, offsetBy: 4))
        strUpdated.insert(" ", at: strUpdated.index(strUpdated.startIndex, offsetBy: 5))
        strUpdated.insert("-", at: strUpdated.index(strUpdated.startIndex, offsetBy: 9))
    }
    return strUpdated
}

Ответ 7

Вы не можете использовать ниже Swift 2.0, потому что String перестал быть collection в Swift 2.0. но в Swift 3/4 больше не нужно теперь, когда String снова является Collection. Используйте нативный подход String, Collection.

var stringts:String = "3022513240"
let indexItem = stringts.index(stringts.endIndex, offsetBy: 0)
stringts.insert("0", at: indexItem)
print(stringts) // 30225132400

Ответ 8

Может быть, это расширение для Swift 4 поможет:

extension String {
    mutating func insert(string:String,ind:Int) {
        self.insert(contentsOf: string, at:string.index(string.startIndex, offsetBy: ind) )
    }
}