按特定顺序用数组填充 UIPickerView
Fill UIPickerView with array in specific order
我在 Translator
class.
中有语言及其代码的散列 [String: String]
let language_codes: [String: String] = [
NSLocalizedString("English", comment: "English") : "1" ,
NSLocalizedString("German", comment: "German") : "7" ,
NSLocalizedString("French", comment: "French") : "3" ,
NSLocalizedString("Spanish", comment: "Spanish") : "12",
NSLocalizedString("Italian", comment: "Italian") : "5"
]
我需要用散列键以相同的顺序填充 UIPickerView
,因为它们在散列中:英语、德语、法语等。
此函数 return 它们的顺序不同:法语、英语、德语、意大利语、西班牙语。
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return Array(translator.language_codes.keys)[row]
}
我不明白为什么。感谢您的帮助!
Swift 字典本质上是无序的。考虑以下选项之一:
元组数组
用一个元组来存储语言和代码,然后做一个元组数组:
private typealias LanguageCode = (localizedString: NSLocalizedString, code: String)
let language_codes: [LanguageCode] = [
(localizedString: NSLocalizedString("English", comment: "English"), code: "1")
...
]
然后,在pickerView函数中:
return translator.language_codes[row].localizedString
自定义对象数组
或者,创建一个自定义对象而不是使用可能会变得混乱的元组。在这种情况下,结构(值类型)可能是最好的:
struct LanguageCode {
let localizedString: NSLocalizedString
let code: String
}
let language_codes: [LanguageCode] = [
LanguageCode(localizedString: NSLocalizedString("English", comment: "English"), code: "1")
...
]
然后,在pickerView函数中:
return translator.language_codes[row].localizedString
编辑:您可能希望在声明类型时使用 String
而不是 NSLocalizedString
。
我在 Translator
class.
[String: String]
let language_codes: [String: String] = [
NSLocalizedString("English", comment: "English") : "1" ,
NSLocalizedString("German", comment: "German") : "7" ,
NSLocalizedString("French", comment: "French") : "3" ,
NSLocalizedString("Spanish", comment: "Spanish") : "12",
NSLocalizedString("Italian", comment: "Italian") : "5"
]
我需要用散列键以相同的顺序填充 UIPickerView
,因为它们在散列中:英语、德语、法语等。
此函数 return 它们的顺序不同:法语、英语、德语、意大利语、西班牙语。
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return Array(translator.language_codes.keys)[row]
}
我不明白为什么。感谢您的帮助!
Swift 字典本质上是无序的。考虑以下选项之一:
元组数组
用一个元组来存储语言和代码,然后做一个元组数组:
private typealias LanguageCode = (localizedString: NSLocalizedString, code: String)
let language_codes: [LanguageCode] = [
(localizedString: NSLocalizedString("English", comment: "English"), code: "1")
...
]
然后,在pickerView函数中:
return translator.language_codes[row].localizedString
自定义对象数组
或者,创建一个自定义对象而不是使用可能会变得混乱的元组。在这种情况下,结构(值类型)可能是最好的:
struct LanguageCode {
let localizedString: NSLocalizedString
let code: String
}
let language_codes: [LanguageCode] = [
LanguageCode(localizedString: NSLocalizedString("English", comment: "English"), code: "1")
...
]
然后,在pickerView函数中:
return translator.language_codes[row].localizedString
编辑:您可能希望在声明类型时使用 String
而不是 NSLocalizedString
。