未確認のエントリを削除するために、辞書に沿って反復しようとしています。次の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
は、key
とvalue
の両方を含むタプルです。
しかし、おそらくenumerated()
を削除したいだけです。
_for (key, element) in self.sharingDictionary {
...
}
_
enumerated()
は反復を取り、ゼロから始まるインデックスを追加します。これは、辞書で使用することはあまり一般的ではありません。
これでうまくいくはずです、
localDictionary.enumerateKeysAndObjects ({ (key, value, stop) -> Void in
})