我正在学习swift,我正在尝试创建一个函数,它将根据按下的按钮更新故事.我已经设置了按钮按下位,但是我将按下的按钮的标签传递给该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
}
}
Run Code Online (Sandbox Code Playgroud)
StoryIndex被定义为类中的全局变量.
任何指针都将非常感激.
因为字典查找会返回一个可选项(键可能会丢失),所以您需要先打开结果,next[storyIndex]然后才能对其进行索引.在这里使用?(可选链接)安全地打开值.由于您需要结果,而不是比较nil,使用if let(可选绑定):
if let nextStory = next[storyIndex]?[myTag] {
storyIndex = nextStory
}
Run Code Online (Sandbox Code Playgroud)
如果storyIndex不是有效密钥,那么next[storyIndex]将是nil,并且可选链的结果将是nil.如果myTag不是有效密钥,结果也将是nil.在这两个密钥是有效的情况下,任选的链的结果将是Int?与nextStory将被绑定到展开的值.
如果您有一个默认值storyIndex(例如1)如果查找失败,您可以使用nil coalescing运算符 ??和可选链在一行中执行此操作:
storyIndex = next[storyIndex]?[myTag] ?? 1
Run Code Online (Sandbox Code Playgroud)
或(storyIndex为了查找失败而保持不变):
storyIndex = next[storyIndex]?[myTag] ?? storyIndex
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
398 次 |
| 最近记录: |