Тип выражения '(_) -> _' неоднозначен без дополнительного контекста - PullRequest
0 голосов
/ 23 сентября 2019

получение ошибки при обновлении с swift 3 до swift 4. ошибка возникает при использовании метода UICollection executeBatchUpdates ().Мой код выглядит примерно так:

Class A: UICollectionViewDelegate {
    @IBOutlet weak var collectionView: UICollectionView!

    func someMethod() {
         collectionView?.performBatchUpdates({ [weak self] _ in // error:  Expression type '(_) -> _' is ambiguous without more context
             self?.collectionView?.deleteItems(at: [IndexPath(item: 0, section: 0)])
            }, completion: nil)
         })
    }
} 

Ответы [ 3 ]

1 голос
/ 23 сентября 2019

_ in означает:

  1. Подтверждение существования переменной, передаваемой вам в закрытию.
  2. Однако вы хотите игнорировать эту переменную, т.е. не выделять какую-либо память.Вы игнорируете это, не давая переменной имя.См. Что такое символ подчеркивания _ в Swift References? .

Если переменная не передается из performBatchUpdates, то это подтверждение становится ненужным и неправильным.Таким образом, вы должны удалить _.Но все равно оставьте in, потому что вам нужно передать в a weak ссылку на self, чтобы избежать проблем с памятью.

0 голосов
/ 23 сентября 2019

Весь ваш код не будет компилироваться, поскольку класс должен иметь потомка NSObject, кроме того, performBatchUpdates не имеет переменных в своем завершении, поэтому этот _ должен быть удален

class A : UIViewController,UICollectionViewDelegate {

        @IBOutlet weak var collectionView: UICollectionView!

        func someMethod() {
            collectionView?.performBatchUpdates({ [weak self]  in
                self?.collectionView?.deleteItems(at: [IndexPath(item: 0, section: 0)])
          })
        }
}
0 голосов
/ 23 сентября 2019

удалить "_" в

//...
collectionView?.performBatchUpdates({ [weak self] _ in
//...

сделать это

//...
collectionView?.performBatchUpdates({ [weak self] in
//...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...