2016-04-26 14 views
1

次のコードでは、コンパイラは「オプション型の値「ListNode?」アンラップされていない;あなたは '!'または '?'? "Swiftオプション値whileループ条件のアンループ

コードは、リンクリストを操作するためのものです:

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

私の質問は、curが、オプションとして宣言されていることを考えるとエラーを修正する方法ですか?私は他のアンラップの回答をチェックしましたが、この条件はwhileループ条件の範囲内です。

+0

再生できません... – Sweeper

答えて

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 
} 
+0

あなたは正しいです。 swift 2.2にアップデートした後、エラーの正しい位置を指し示します。それ以前のどの迅速なバージョンを確認していない。ありがとう! – Cindy

関連する問題