如何在Swift中删除String中的变音符号?

sigwle7e  于 11个月前  发布在  Swift
关注(0)|答案(5)|浏览(87)

如何在Swift中从String中删除变音符号(或重音符号)(比如将“één”改为“een”)?我必须回到NSString还是可以在Swift中完成?

velaa5lx

velaa5lx1#

您可以直接在Swift String上操作(如果导入了“Foundation”):

let foo = "één"
let bar = foo.stringByFoldingWithOptions(.DiacriticInsensitiveSearch, locale: NSLocale.currentLocale())
print(bar) // een

字符串

Swift 3:

let foo = "één"
let bar = foo.folding(options: .diacriticInsensitive, locale: .current)
print(bar) // een

oknrviil

oknrviil2#

更新到@MartinR的答案.一个Swift 3扩展,提供一个用于排序/搜索的字符串,这可能对某人有用.

extension String {
    var forSorting: String {
        let simple = folding(options: [.diacriticInsensitive, .widthInsensitive, .caseInsensitive], locale: nil)
        let nonAlphaNumeric = CharacterSet.alphanumerics.inverted
        return simple.components(separatedBy: nonAlphaNumeric).joined(separator: "")
    }
}

字符串
例如

print("Mÿ nâMe ís jÄço´B".forSorting) // "mynameisjacob"

hkmswyz6

hkmswyz63#

This is my solution这是我的解决方案

  • 斯威夫特5号酒店,纽约**
extension String {

        func unaccent() -> String {

            return self.folding(options: .diacriticInsensitive, locale: .current)

        }

    }

字符串

vulvrdjw

vulvrdjw4#

这也可以通过应用StringTransform来完成:

let foo = "één"
let bar = foo.applyingTransform(.stripDiacritics, reverse: false)!
print(bar) // een

字符串
或实现StringProtocol的自定义属性

extension StringProtocol {
    var strippingDiacritics: String {
        applyingTransform(.stripDiacritics, reverse: false)!
    }
}
let bar = foo.strippingDiacritics
print(bar) // een

的数据

xnifntxz

xnifntxz5#

Swift 5.0.1的答案更新

func toNoSmartQuotes() -> String {
    let userInput: String = self
    return userInput.folding(options: .diacriticInsensitive, locale: .current)
}

字符串
使用someTextField.text.toNoSmartQuotes()

相关问题