Ios Can';t使用Swift 2动态访问词典
我正在使用Swift 2和XCode 7.2,并尝试动态获取字典元素 这是位于NSUserDefaults内的我的字典,其中包含用户配置: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
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谢谢这就是问题所在。我在混合关键的名字。多愚蠢的错误啊,谢谢。