swift 3 - 搜索结果也带有变音符号

Posted

技术标签:

【中文标题】swift 3 - 搜索结果也带有变音符号【英文标题】:swift 3 - search result also with diacritics 【发布时间】:2017-01-24 08:19:38 【问题描述】:

在我的应用程序中,我使用的搜索效果很好,但我需要建议。当我搜索没有变音符号的文本时,我不知道该怎么做,结果也带有变音符号。 示例:输入搜索holesovice,我需要找到holesoviceholešovice

这是我的部分代码:

func filterContentForSearchText(_ searchText: String) 
        filteredERequests = requests.filter(( request : CityRequest) -> Bool in

            return request.cityName.lowercased().contains(searchText.lowercased())

        )
        myTable.reloadData()
    

【问题讨论】:

【参考方案1】:

您可以将range(of:, options:) 与变音符号不敏感选项一起使用 (并且可以选择不区分大小写)搜索。示例:

let list = ["holesovice", "holešovice"]
let searchTerm = "sovi"

let filtered = list.filter 
    $0.range(of: searchTerm, options: [.diacriticInsensitive, .caseInsensitive]) != nil


print(filtered) // ["holesovice", "holešovice"]

【讨论】:

感谢您的建议,但老实说我不明白,如何在我的代码中使用它... :( @Alien:我无法编译你的代码,因为它不是独立的 :) - 但它应该在你的闭包中类似于 return request.cityName.range(of: searchText, options: [.diacriticInsensitive, .caseInsensitive]) != nil 我是驴 :D。非常感谢!【参考方案2】:

这是 Martin R 的解决方案,只是更容易使用。

将其复制到 Swift 文件中:

extension String 
    func contains(insensitive other: String, range: Range<String.Index>? = nil, locale: Locale? = nil) -> Bool 
        return self.range(of: other, options: [.diacriticInsensitive, .caseInsensitive], range: range, locale: locale) != nil
    

像这样使用它:

if "Música".contains(insensitive: "music") 
    print("hurray!")

【讨论】:

以上是关于swift 3 - 搜索结果也带有变音符号的主要内容,如果未能解决你的问题,请参考以下文章

Android,变音符号不敏感 SQLite 搜索

名称标准化 - 删除变音符号

apache:查询字符串(URL)中的转义变音符号导致 403

带有变音符号的 Unicode 字符串,按字符分割

iPhone CoreData:使用变音符号排序

Azure 搜索语言分析器和变音符号