Swift可选值在while循环条件下展开

Cin*_*ndy 1 linked-list ios swift

在下面的代码中,编译器抱怨"可选类型'ListNode的值?' 没打开;你的意思是用'!' 要么 '?'?"

该代码用于操作链表:

var cur: ListNode? = head
while (cur != nil){ // this line has error
    cur = cur.next
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何修复错误,因为cur被声明为可选的?我检查了其他解包的答案,但这个条件是在while循环条件下.

Mar*_*n R 17

我强烈认为错误实际上发生cur = cur.next在线上,因为cur它是可选的."快速而肮脏"的修复方法是强行打开它:

var cur: ListNode? = head
while cur != nil {
    // do something with `cur!` ...

    cur = cur!.next
}
Run Code Online (Sandbox Code Playgroud)

但正确的解决方案是使用可选绑定,它不仅if可以与while以下组合使用,还可以与:

var cur: ListNode? = head
while let node = cur {
    // do something with `node` ...

    cur = node.next
}
Run Code Online (Sandbox Code Playgroud)