Быстрая функция для char в проблеме с изменением строки

Мне нужно создать функцию, которая изменит несколько элементов в 1 строке Без объявления этого как функции - он работает правильно, но в функции он меняет только 1 случайный символ можешь мне помочь пожалуйста

import Foundation

func makeItCool(_ string: String) -> String {
    var newCoolString = string
    let replaces = [
        "a" : "@",
        "o" : "0",
        "t" : "+",
        "i" : "1",
        "s" : "$",
    ]

    for (key, value) in replaces {
        newCoolString = string.lowercased().replacingOccurrences(of: key, with: value)
    }
    return newCoolString
}
print(makeItCool("Swift is Awesame"))

// sw1ft 1 с потрясающе

Рабочий код

var string = "Swift is Awesaome"
let replaces = [
     "a" : "@",
     "o" : "0",
     "t" : "+",
     "i" : "1",
     "s" : "$",
    ]

for (key, value) in replaces {
    string = string.lowercased().replacingOccurrences(of: key, with: value)
}
print(string)

// $w1f+ 1$ @we$@0me

Пожалуйста, сравните задание в петле for. Разница довольно очевидна.

vadian 19.11.2022 14:28
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
0
1
53
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

В неудачной версии вы всегда применяете преобразование к исходному параметру метода string, поэтому каждый раз в цикле for вы перезаписываете предыдущие изменения и просто возвращаете изменения из последней итерации.

Я уверен, что вы хотели написать:

for (key, value) in replaces {
    newCoolString = newCoolString.lowercased().replacingOccurrences(of: key, with: value)
}

хотя более эффективным подходом было бы

let newCoolString = string.lowercased()

//...

for (key, value) in replaces {
    newCoolString = newCoolString.replacingOccurrences(of: key, with: value)
}
func makeItCool(_ string: String) -> String {
    var newCoolString = string.lowercased()
    let replaces = [
        "a" : "@",
        "o" : "0",
        "t" : "+",
        "i" : "1",
        "s" : "$",
    ]
    
    for (key, value) in replaces {
        newCoolString = newCoolString.replacingOccurrences(of: key, with: value)
    }
    return newCoolString
}
print(makeItCool("Swift is Awesame"))

думаю проблема именно в этой строчке

newCoolString = string.lowercased().replacingOccurrences(of: key, with: value)

Вы должны заменить вхождения в newCoolString следующим образом:

newCoolString = newCoolString.lowercased().replacingOccurrences(of: key, with: value)

Другие вопросы по теме