web-dev-qa-db-ja.com

Swift 3で辞書に沿って反復する

未確認のエントリを削除するために、辞書に沿って反復しようとしています。次のObjective-CコードのSwift 3変換は機能しません:

[[self sharingDictionary] enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) {
                    SharingElement* element=[[self sharingDictionary] objectForKey:key];
                    if (!element.confirmed){
                        dispatch_async(dispatch_get_main_queue(), ^{
                            [element deleteMe];
                        });
                        [[self sharingDictionary] performSelector:@selector(removeObjectForKey:) withObject:key
                                                       afterDelay:.2];
                    } else{
                        element.confirmed=NO;
                }];

そこで、次のコンパクトなenumerated()メソッドをこのように使用してみました。

for (key, element) in self.sharingDictionary.enumerated(){
            if (!element.confirmed){
                    element.deleteMe()
                self.perform(#selector(self.removeSharingInArray(key:)), with:key, afterDelay:0.2);
            } else{
                element.confirmed=false
            }
        }

しかし、コンパイラは変数 'element'の使用を処理しているときに次のエラーを報告します。

タプル型の値 '(キー:Int、値:SharingElement)'にメンバーがありません '確認済み'

「要素」のように、その能力の一部よりも完全なタプルの父を取りました。 enumerated()の使用または辞書の処理に問題があり、どうすれば修正できますか?

_element.value.confirmed_を使用します。 elementは、keyvalueの両方を含むタプルです。

しかし、おそらくenumerated()を削除したいだけです。

_for (key, element) in self.sharingDictionary {
    ...
}
_

enumerated()は反復を取り、ゼロから始まるインデックスを追加します。これは、辞書で使用することはあまり一般的ではありません。

26
Sulthan

これでうまくいくはずです、

        localDictionary.enumerateKeysAndObjects ({ (key, value, stop) -> Void in

    })
0
Deepak Kumar