Хобрук: Ваш путь к мастерству в программировании

Не удалось вывести общий параметр NSMapTable «KeyType»

Следующая строка дает мне ошибку компилятора «общий параметр« KeyType »не может быть выведен»:

fileprivate var delegatesMap = NSMapTable.strongToWeakObjects()

Я попытался выразиться более откровенно, сказав:

fileprivate var delegatesMap:MapTable<Key,Value> = NSMapTable.strongToWeakObjects()

Но тогда Xcode не распознает «Ключ»

Как мне это исправить?

РЕДАКТИРОВАТЬ: я хотел бы, чтобы мой ключ имел тип String, а мое значение - тип MenuActionDelegate (протокол класса)

28.09.2016

  • Не только Swift, но и я не вижу, какой KeyType вы хотите использовать. Какие типы вы хотите использовать в качестве KeyType и ValueType для вашего NSMapTable? 29.09.2016
  • Я хочу использовать строку для ключа и протокол MenuActionDelegate в качестве значения 29.09.2016
  • Вам лучше включить такую ​​​​информацию в свой вопрос. Я напишу короткий ответ. 29.09.2016

Ответы:


1

Возможно, вам придется написать что-то вроде этого:

fileprivate var delegatesMap = NSMapTable<NSString, MenuActionDelegate>.strongToWeakObjects()

Общие параметры KeyType и ValueType должны быть AnyObject, поэтому вы не можете напрямую поместить туда String, также вам нужно явное приведение as NSString.

А тип значения MenuActionDelegate нужен для @objc-протокола. Или же вам может понадобиться написать что-то вроде этого:

var delegatesMap = NSMapTable<NSString, AnyObject>.strongToWeakObjects()

И используйте его как:

let theDelegate = delegatesMap.object(forKey: "delegateName" as NSString) as! MenuActionDelegate
28.09.2016
  • Это протокол класса, но я получаю сообщение об ошибке, в котором говорится, что MenuActionDelegate как конкретный тип, противостоящий протоколу AnyObject, не поддерживается 29.09.2016
  • @FaisalSyed, извините, я пропустил проверку протокола класса. Можете ли вы изменить его @objc-протокол? 29.09.2016
  • Я не могу этого сделать. Как именно я могу добавить явное приведение в качестве NSString? Я пробовал несколько способов, но не смог сделать это правильно 29.09.2016
  • Когда я заменяю MenuActionDelegate на AnyObject в скобках, он хочет, чтобы я привел все свои объекты String к NSString, а вторая строка не компилируется 29.09.2016
  • Вторая строка выдает ошибку компилятора: невозможно использовать член экземпляра delegatesMap в инициализаторе свойства; инициализаторы свойств запускаются до того, как «я» станет доступным 29.09.2016
  • Такое использование не разрешено даже в Swift 2 — использование свойств экземпляра в начальном значении другого свойства экземпляра. Если вы хотите сделать theDelegate переменной экземпляра, вам нужно присвоить ее позже где-нибудь в методе экземпляра. 29.09.2016
  • Новые материалы

    Введение в контекст React
    В этом посте мы поговорим о Context API, который был представлен в React 16, и о том, как вы можете их использовать. Что такое контекст? Глядя на определение из react docs , оно..

    Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
    Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

    Это оно
    Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

    7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
    Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

    Базовое руководство по переносу концепций обучения в глубокое обучение
    Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

    C в C.R.U.D с использованием React-Redux
    Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

    5 обязательных элементов современного инструмента конвейера данных
    В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..