Swift: как заменить прописные символы в массиве - PullRequest
0 голосов
/ 10 мая 2019

Этот код заменяет кириллицу латинскими:

let cyr = ["а", "б", "в", "г", "д", "Б"]
let latin = ["a", "b", "v", "g", "d", "B"]
var original = self.input.text        
for i in 0..<cyr.count {
    let target = cyr[i]
    let destination = latin[i]  
    original = original?.replacingOccurrences(of: target, with: destination, options: String.CompareOptions(rawValue: NSString.CompareOptions.caseInsensitive.rawValue | NSString.CompareOptions.literal.rawValue), range: nil)
    self.output.text = original;

Но это не заменяет прописные символы на верхние, если я добавлю их в массив. Он либо заменяет все нижние регистры на верхние, либо верхние на нижние. Как сделать так, чтобы он различался, если это заглавный или нижний символ, и заменить его соответственно?

Ответы [ 2 ]

2 голосов
/ 10 мая 2019

Не следует использовать опцию caseInsensitive, если вы хотите найти и заменить регистр чувствительный .Ваш код также может быть упрощен до

let cyr = ["а", "б", "в", "г", "д", "Б"]
let latin = ["a", "b", "v", "g", "d", "B"]

var text = "абвгдБ"

for (src, dest) in zip(cyr, latin) {
    text = text.replacingOccurrences(of: src, with: dest)
}
print(text) // abvgdB

Сказав, что вам действительно может потребоваться транслитерация на латиницу:

let original = "абвгдБ"
let trans = original.applyingTransform(.toLatin, reverse: false) ?? original
print(trans) // abvgdB
1 голос
/ 10 мая 2019

Удалите параметр caseInsensitive и добавьте заглавные буквы в массивы.

let cyr = ["а", "б", "в", "г", "д", "Б", "А", ...]
let latin = ["a", "b", "v", "g", "d", "B", "A", ...]
var original = self.input.text        
for i in 0..<cyr.count {
    let target = cyr[i]
    let destination = latin[i]  
    original = original?.replacingOccurrences(of: target, with: destination, options: [.literal], range: nil)
}
self.output.text = original

...