I want to replace some character occurrences with english letters using Swift. Replace code:
let turkish = ["ı", "ğ", "ü", "ş", "ö", "ç"]
let english = ["i", "g", "u", "s", "o", "c"]
var city = "Ağri"
var result = ""
for i in 0..<turkish.count {
var target = turkish[i]
var destination = english[i]
result = city.stringByReplacingOccurrencesOfString(target, withString: destination, options: NSStringCompareOptions.CaseInsensitiveSearch | NSStringCompareOptions.LiteralSearch, range: nil)
}
It does not replace "ğ" with "g". What's strange is that, if I type it directly like this:
result = city.stringByReplacingOccurrencesOfString("ğ", withString: "g", options: NSStringCompareOptions.CaseInsensitiveSearch | NSStringCompareOptions.LiteralSearch, range: nil)
it works perfectly fine.
Why doesn't it, when I first assign the value to a String
variable?
It looks like you are trying to remove a variety of accents and diacritics. One way that you can do that is using CFStringTransform
.
In Swift it would look something like this:
let original = "šÜįéïöç"
var mutableString = NSMutableString(string: original) as CFMutableStringRef
CFStringTransform(mutableString, nil, kCFStringTransformStripCombiningMarks, Boolean(0))
let normalized = (mutableString as NSMutableString).copy() as! NSString
// = sUieioc
As was pointed out by Martin R in the comments. You can do the same without Core Foundation:
let original = "šÜįéïöç"
let normalized = original.stringByFoldingWithOptions(.DiacriticInsensitiveSearch, locale: NSLocale.currentLocale())
// = sUieioc
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With