Мне нужно создать функцию, которая изменит несколько элементов в 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
В рабочем примере вы итеративно обновляете одну и ту же строку, поэтому эффекты замен являются кумулятивными.
В неудачной версии вы всегда применяете преобразование к исходному параметру метода 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)
Пожалуйста, сравните задание в петле
for
. Разница довольно очевидна.