Ios Can';t使用Swift 2动态访问词典

Ios Can';t使用Swift 2动态访问词典,ios,swift,dictionary,dynamic,swift2,Ios,Swift,Dictionary,Dynamic,Swift2,我正在使用Swift 2和XCode 7.2,并尝试动态获取字典元素 这是位于NSUserDefaults内的我的字典,其中包含用户配置: let dicAlerts : [String : Int] = [ "alertOne" : 1, "alertTwo" : 1, "alertThree" : 1, "alertFour" : 1, "alertFive" : 1, "alertSix" : 1, "alertSeven" : 1

我正在使用Swift 2和XCode 7.2,并尝试动态获取字典元素

这是位于NSUserDefaults内的我的字典,其中包含用户配置:

let dicAlerts : [String : Int] = [
    "alertOne" : 1,
    "alertTwo" : 1,
    "alertThree" : 1,
    "alertFour" : 1,
    "alertFive" : 1,
    "alertSix" : 1,
    "alertSeven" : 1
]
如果我把这个打印出来,一切看起来都很好:

代码:

        let alerts = userSettings.dictionaryForKey("alerts")!

    print(alerts)
print(alerts["alertSix"])
输出:

        let alerts = userSettings.dictionaryForKey("alerts")!

    print(alerts)
print(alerts["alertSix"])
[“警报六”:1,“警报七”:1,“警报三”:1,“警报二”:1,“警报五”:1,“警报一”: 1,“警报四”:1]

用户可以通过设置面板进行配置,如果我打印item.reuseIdentifier,则使用以下代码我有一个UITable中所有静态单元格的列表。我可以看到正确的值(alertOne、alertTwo、alertThree、alertFour、alertFive、alertSix、alertSeven):

有一个原因我无法确定,但上面的代码不起作用

致命错误:在展开可选值时意外发现nil (lldb)

以下情况确实如此:

        let alerts = userSettings.dictionaryForKey("alerts")!

    print(alerts)
print(alerts["alertSix"])
一,

问题是为什么动态地它不工作,而当我硬编码键时它会工作

我怎样才能让它工作

对我来说更奇怪的是,如果你单独打印密钥,你就得到了密钥,但是当你把它放在字典里时,它是不起作用的

这将是完整的示例:

// Get the user settings
let userSettings = NSUserDefaults.standardUserDefaults()

@IBOutlet weak var alertOne: UITableViewCell!
@IBOutlet weak var alertTwo: UITableViewCell!
@IBOutlet weak var alertThree: UITableViewCell!
@IBOutlet weak var alertFour: UITableViewCell!
@IBOutlet weak var alertFive: UITableViewCell!
@IBOutlet weak var alertSix: UITableViewCell!
@IBOutlet weak var alertSeven: UITableViewCell!

// Array of alerts
var alertRows: [UITableViewCell] {
    return [alertOne, alertTwo, alertThree, alertFour, alertFive, alertSix, alertSeven]
}

override func viewDidLoad() {
    super.viewDidLoad()

    let alerts = userSettings.dictionaryForKey("alerts")!

    print(alerts) // OK

    for (_, item) in alertRows.enumerate() {

        let key : String = item.reuseIdentifier!

        print(key) // OK = return alertOne
        print(alerts["alertOne"]) // OK = return 1
        print(alerts[key]) // ERROR described above (unexpectedly found nil while [...])

        if alerts[key] == 1 {

            item.accessoryType = .Checkmark
        } else {

            item.accessoryType = .None
        }
    }
}

打印
item.reuseIdentifier以查看它们产生的结果。顺便说一句,它在哪一条线上撞车?请将您所有的代码片段组合成一个完整的示例,您在哪里打印什么?它在哪里崩溃?更新,我只是在做这件事,很可能你的崩溃发生在第
行打印(警报[键]!)
,因为在你现有的字典
警报中找不到
键。您应该避免像这样强制展开,而是使用类似以下内容的内容
print(警报[key]?“无法在字典中找到key'\(key)”)
您是否100%确定没有打字错误、空格或其他内容<代码>打印(key==“alertOne”)
@luk2302谢谢这就是问题所在。我在混合关键的名字。多愚蠢的错误啊,谢谢。