在下面的代码中,编译器抱怨“可选类型'ListNode的值?'没打开;你的意思是用'!'还是'?'?“
代码用于操作链表:
$search_text = preg_grep($pattern, file($path));
我的问题是如何修复错误,因为cur被声明为可选项?我已经检查了其他解包的答案,但是这个条件在while循环条件下。
答案 0 :(得分:17)
我强烈认为错误实际发生在cur = cur.next
行,因为cur
是可选的。 “快速而肮脏”的解决方案将是
强行打开它:
var cur: ListNode? = head
while cur != nil {
// do something with `cur!` ...
cur = cur!.next
}
但正确的解决方案是使用可选绑定,但不起作用
仅与if
结合使用,但与while
:
var cur: ListNode? = head
while let node = cur {
// do something with `node` ...
cur = node.next
}