【问题标题】:How to sort AVSpeechSynthesisVoice.speechVoices()如何排序 AVSpeechSynthesisVoice.speechVoices()
【发布时间】:2020-06-11 14:48:56
【问题描述】:

我是一个初学者,我正在做这个,我注意到选择器视图没有排序

土耳其语之后显然没有中文,那我该如何整理呢?我一直在查看我的代码几个小时,似乎无法弄清楚如何对其进行排序。这是我的完整代码。

谢谢

import AVFoundation
import UIKit

class SettingsView: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
    @IBOutlet var pickerView: UIPickerView!

    var voicesArray: [String] = []
    let speechVoices = AVSpeechSynthesisVoice.speechVoices()

    override func viewDidLoad() {
        super.viewDidLoad()

        pickerView.delegate = self
        pickerView.dataSource = self
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return speechVoices.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        let language = Locale.current.localizedString(forLanguageCode: speechVoices[row].language)!
        let languageCode = speechVoices[row].language

        var regionCode:String = ""
        for region in Locale.isoRegionCodes {
            // Test if provided region codes has voices or not
            if languageCode.contains(region) {
                regionCode = region
            }
        }

        let country = Locale.current.localizedString(forRegionCode: String(regionCode))

        return "\(language) (\(country ?? ""))"
    }

    @IBAction func done(_ sender: UIButton) {
        dismiss(animated: true, completion: nil)
    }
}

【问题讨论】:

    标签: swift avfoundation uipickerview avspeechsynthesizer


    【解决方案1】:

    中文 (zh) 肯定排在土耳其 (tr) 之后,所以这些似乎已经按地区代码排序。如果您想按其他内容进行排序(我假设它们的显示名称以区域设置语言显示),那么您可以在为选择器设置元素列表时对它们进行排序。例如:

    let speechVoices = AVSpeechSynthesisVoice.speechVoices().sorted(by: {
        Locale.current.localizedString(forLanguageCode: $0.language)! < Locale.current.localizedString(forLanguageCode: $1.language)!
    })
    

    【讨论】:

    • 谢谢,这行得通!在我学习的过程中,$0 和 $1 的含义和作用是什么?正如我注意到它被使用但似乎无法找到有关它的资源,可能是因为我不知道它的术语是什么。
    • 这将是一件很难搜索的事情。 :D 参见 Swift Programming Language 书中的“Shorthand Argument Names”:docs.swift.org/swift-book/LanguageGuide/Closures.html
    猜你喜欢
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多