ios - Swift 的问题:可选类型 '[Int : Int]?' 的值 未拆封;你的意思是用'!' 或者 '?'?
问题描述
我目前正在快速学习,并且正在尝试创建一个函数,该函数将根据按下的按钮更新故事。我已经设置了按钮按下位,但随后我将按下按钮的标签传递给updateStory
函数。
func updateStory(myTag: Int) {
let next = [
1 : [
1 : 3,
2 : 2,
],
2 : [
1 : 3,
2 : 4,
],
3 : [
1 : 6,
2 : 5,
]
]
// Error:(86, 17) value of optional type '[Int : Int]?' not unwrapped; did you mean to use '!' or '?'?
if (next[storyIndex][myTag] != nil) {
let nextStory = next[storyIndex][myTag]
storyIndex = nextStory
}
}
StoryIndex 被定义为类中的全局变量。
任何指针将不胜感激。
解决方案
因为字典查找返回一个可选的(可能缺少键),所以您需要先解开结果,next[storyIndex]
然后才能对其进行索引。在此处使用?
(可选链接)来安全地解开该值。由于您需要结果,而不是比较 to nil
,请使用if let
(可选绑定):
if let nextStory = next[storyIndex]?[myTag] {
storyIndex = nextStory
}
如果storyIndex
不是有效键,则为 ,next[storyIndex]
可选nil
链的结果为nil
。如果myTag
不是有效的键,结果也将是nil
. 在两个键都有效的情况下,可选链的结果Int?
将nextStory
绑定到解包值。
如果你有一个默认值用于storyIndex
(例如1
)如果查找失败,你可以使用nil 合并操作符 ??
和可选链在一行中执行此操作:
storyIndex = next[storyIndex]?[myTag] ?? 1
或(storyIndex
对于查找失败保持不变):
storyIndex = next[storyIndex]?[myTag] ?? storyIndex