Как исправить ошибку: общий параметр 'T' не может быть выведен

С эмуляцией карт на базе хоста (HCE) в Android 4.4 вы можете эмулировать протокол ISO / IEC 14443-4. Более конкретно, вы можете эмулировать структуры приложений в соответствии с ISO / IEC 7816-4 (при этом приложения эмуляции карт должны выбираться с помощью AID). Кроме того, API не дает вам никаких средств, чтобы указать, следует ли использовать эмуляцию карты с использованием протокола типа A или типа B.

. Что касается эмуляции различных протоколов MIFARE:

  • Протокол MIFARE Ultralight (и дериватов) работает поверх ISO / IEC 14443-3.
  • Протокол MIFARE Classic частично работает поверх ISO / IEC 14443-3 (с некоторым другим обрамлением) , Таким образом, его также невозможно эмулировать MIFARE Classic с помощью Android HCE.
  • Протоколы MIFARE DESFire работают поверх ISO / IEC 14443-4. Существует три варианта протокола DESFire: собственный протокол : поскольку этот протокол не использует APDU в соответствии с ISO / IEC 7816-4, его невозможно эмулировать с помощью Android HCE. обернул собственный протокол : этот протокол использует APDU в соответствии с ISO / IEC 7816-4, однако, как правило, читатели не выдают команду SELECT с использованием DESFire AID при запуске связи с картой в оболочном режиме командной строки , (Примечание. Более новые реализации читателей с большей вероятностью выдают команду SELECT, совместимую с Android HCE, поскольку это также необходимо для некоторых новых продуктов смарт-карт NXP с эмуляцией протокола DESFire.) Протокол ISO : этот протокол основан на ISO / IEC 7816-4 и использует выбор приложений с помощью AID. Таким образом, можно будет эмулировать этот протокол с помощью Android HCE. Некоторым читателям могут потребоваться определенные значения параметров в нижних слоях протокола (например, конкретный каскадный уровень UID, определенное значение ATQA, определенное значение SAK или определенное ATS). Android HCE не имеет никаких средств для установки этих значений. См. Редактирование функциональности эмуляции гостевой карты в Android для возможного подхода к изменению этих значений для определенных корневых устройств и мой ответ на эмуляцию карты на основе хоста с идентификатором фиксированной карты для стратегия для программного изменения этих значений в пользовательском ПЗУ.

Примечание о функции HCE, доступной в CyanogenMod с версии 9.1 до версии 10.2 : Это будет подражать любому ISO / IEC 14443-4 без требования к структуре приложения в соответствии с ISO / IEC 7816-4. Вы даже можете выбрать, хотите ли вы эмулировать протокол типа A или типа B. Поэтому должно быть возможно (хотя я еще не тестировал), чтобы подражать любому из трех протоколов DESFire. Однако даже с функцией HCE CyanogenMod невозможно эмулировать протоколы MIFARE Ultralight или Classic. Более того, также невозможно влиять на параметры протокола низкого уровня, такие как UID, ATQA, SAK или ATS.

0
задан vaart12345 17 January 2019 в 01:01
поделиться

2 ответа

  1. Исправьте опечатку (и)

    func dequeueReusableCell<T: UICollectionViewCell>( ...
    
  2. Аннотируйте тип и удалите приведение типа

    let cell : TacoCell = collectionView.dequeueReusableCell(forIndexPath: indexPath)
    
0
ответ дан vadian 17 January 2019 в 01:01
поделиться

Вы должны разрешить общее ограничение для dequeReusableCell: <T: UICollectionViewCell> вместо <T: UICollectionView>:

func dequeReusableCell<T: UICollectionViewCell>(forIndexPath indexPath: IndexPath) -> T where T: ReusableView{

Очевидно, я бы предположил, что TacoCell является типом ReusableView.

0
ответ дан Ahmad F 17 January 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: