2017-03-14 15 views
-3

私は少し混乱しています。私はObjective-Cでこのコードを持っています。私はすぐに同じ結果を得る必要があります。たとえば:ループ同等のSwift 3

NSArray *cells = [self.someTableView visibleCells]; 

for (SomeTableViewCellClass *someCell in cells){ 
    // some coding 
} 

私はこのように試してみましたが、それはsomeCellが使用されていなかったというエラーがスローされますが、それを削除するに考える:

for someCell in cells { // in this line 
    let comeCell = SomeTableViewCellClass 
    // some coding 
} 

をしかし、私はこのようにそれを行う場合は、それをそれは、一方から他方へ値を変換することはできませんと言う:

for someCell in cells as SomeTableViewCellClass { // in this line 
     // some coding 
} 

私はここに、この質問についてのいくつかの記事があることを知っているが、私はそれらを読む限り、彼らは少し異なっていて、私自身のコードNRで解決することができます。 2。 Objective-Cファイルにはこのようなループがたくさんあるので、同等のものがあれば誰かが私を助けて答えることができたら大変感謝しています。

+0

答えは文字通りインターネット上のすべてです... apples docsへのリンクがあるので、自分でGoogleに移動する必要はありません:https://developer.apple.com/library/content/documentation/Swift/ Conceptual/Swift_Programming_Language/ControlFlow.html – katzenhut

答えて

1

はこれを試してみてください。

for cell in cells { 
    if let classCell = cell as? SomeTableViewCellClass { 
     classCell.doSomething() 
     // some coding 
    } 
} 
+0

クイックアンサーに感謝します。私はEendjeの答えが同じことをすると信じていますが、あなたの答えは私には分かりやすいです。良い仕事、多くのありがとう。 –

3

visibleCellsUITableViewCell要素の配列を返します。 のObjective-Cでは、コンパイラに指示します

for (SomeTableViewCellClass *someCell in cells) { 
    // Do something with `someCell` ... 

} 

書くことができます:「私はすべての配列要素がSomeTableViewCellClassの 実際のインスタンスであることをを知っをちょうど私を信じている」と語りました。いくつかのセルがない場合のObjective-Cとあなたが間違っている場合スウィフトコードがクラッシュします、 すなわち両

for someCell in someTableView.visibleCells as! [SomeTableViewCellClass] { 
    // Do something with `someCell` ... 

} 

:構文は、スウィフトに存在しない、似た何かが強制的にキャストされること

SomeTableViewCellClassのインスタンス

安全な溶液は、ケースパターンのforループである:

for case let someCell as SomeTableViewCellClass in someTableView.visibleCells { 
    // Do something with `someCell` ... 

} 

これは、SomeTableViewCellClassサブクラスのインスタンスであるすべての配列要素を列挙し、そして他の要素をスキップします。

+1

これは素晴らしい機能です。それについて知りません。ありがとう。 –

関連する問題