我的应用程序中使用Swift编写了字典
var cities: [String: String] = ["":"not specified", "ny":"New York", "la":"Los Angeles", "sf":"San Francisco"]
我使用这个字典来构建pickerView。当用户选择其中一项时 - 城市代码将保存到设备内存中。
当用户下次打开应用程序时,我希望pickerView显示已保存的城市。我该怎么办?
答案 0 :(得分:1)
您可以在具有高阶函数的字典中找到键的索引:
let desiredKey = "ny"
let pos = x.enumerate().filter { (pair: (index: Int, element: (String, String))) -> Bool in
return pair.element.0 == desiredKey
}.map { (pair: (index: Int, element: (String, String))) -> Int in
return pair.index
}
pos
是一个Optional(Int)
,其中包含"ny"
在字典当前迭代顺序中的位置。
将密钥的值存储在某处(例如,在用户默认值中),然后检索它,使用上面的代码获取键值对的索引,并传递到选择器视图的selectedRowInComponent:
。 / p>
注意:单独使用字典作为选择器支持的问题是未明确指定订单。添加或删除键可能会更改现有键的顺序。此外,现有密钥可能不会在您希望的位置结束 - 例如,您的"" - "not specified"
对可能最终位于选择器的中间。
要解决此问题,请按照您希望遵循的正确顺序保留单独的城市密钥数组。使用此数组来决定要显示城市的选取行,并使用字典查找实际城市。
答案 1 :(得分:1)
您可以使用NSUserDefaults来确保cityCode的持久性。
将此样本粘贴在游乐场中。
var cities: [String: String] = ["":"not specified", "ny":"New York", "la":"Los Angeles", "sf":"San Francisco"]
let cityCodeIndexKey="cityCodeIndexKey"
/**
Selects and saves the cityCode
- parameter cityCode: a cityCode String
- returns: true if the code exists.
*/
func selectCity(cityCode:String)->Bool{
if let _ = cities.indexForKey(cityCode){
NSUserDefaults.standardUserDefaults().setObject(cityCode, forKey:cityCodeIndexKey)
NSUserDefaults.standardUserDefaults().synchronize()
return true
}else{
return false
}
}
selectCity("ny") // Returns true
selectCity("pr") // Returns false
NSUserDefaults.standardUserDefaults().valueForKey(cityCodeIndexKey) // returns "ny"
答案 2 :(得分:0)
获取密钥,
var cityLongName <-用户选择了一个
var key = dict.first((key,value) In{
If (value == cityLongName ){
return true
}else{
return false
}
}).key!
获取值,
var value = dict[“city sort name”]