Swift字符串替换出现

aym*_*eba 4 ios swift

我想用Swift用英文字母替换一些字符.替换代码:

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)
}
Run Code Online (Sandbox Code Playgroud)

它不会用"g"代替"ğ".奇怪的是,如果我像这样直接输入:

result = city.stringByReplacingOccurrencesOfString("?", withString: "g", options: NSStringCompareOptions.CaseInsensitiveSearch | NSStringCompareOptions.LiteralSearch, range: nil)
Run Code Online (Sandbox Code Playgroud)

它工作得很好.

当我第一次将值String赋给变量时,为什么不呢?

Dav*_*ist 11

看起来你正试图删除各种口音和变音符号.您可以使用的一种方法是使用CFStringTransform.

在Swift中,它看起来像这样:

let original = "šÜ?éïöç"
var mutableString = NSMutableString(string: original) as CFMutableStringRef
CFStringTransform(mutableString, nil, kCFStringTransformStripCombiningMarks, Boolean(0))

let normalized = (mutableString as NSMutableString).copy() as! NSString
// = sUieioc
Run Code Online (Sandbox Code Playgroud)

编辑

正如Martin R在评论中指出的那样.没有Core Foundation你也可以这样做:

let original = "šÜ?éïöç"
let normalized = original.stringByFoldingWithOptions(.DiacriticInsensitiveSearch, locale: NSLocale.currentLocale())
// = sUieioc
Run Code Online (Sandbox Code Playgroud)

  • 同样可以直接在Swift字符串上完成,没有CoreFoundation:http://stackoverflow.com/questions/29521951/how-to-remove-diacritics-from-a-string-in-swift(我从http中学到了: //stackoverflow.com/a/15155624/1187415). (4认同)