获得swift字典项索引的正确方法

时间:2016-05-28 09:40:29

标签: ios swift

我的应用程序中使用Swift编写了字典

var cities: [String: String] = ["":"not specified", "ny":"New York", "la":"Los Angeles", "sf":"San Francisco"]

我使用这个字典来构建pickerView。当用户选择其中一项时 - 城市代码将保存到设备内存中。

当用户下次打开应用程序时,我希望pickerView显示已保存的城市。我该怎么办?

3 个答案:

答案 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”]