короткий вопрос здесь:Swift словарь с протоколом типа как ключевой
я получил протокол protocol SCResourceModel {..}
и словарь, который будет использовать этот тип протокола, как ключ: [SCResourceModel : String]
. Это явно не работает, так как ключ в словаре должен соответствовать протоколу Hashable
. Делать мой SCResourceModel
наследовать от Hashable
или пробовать что-то вроде этого [protocol<SCResourceModel, Hashable> : String]
явно не работает, так как Hashable
или Equatable
могут использоваться только как общие ограничения, а не как сами типы.
Я смотрел WWDC 2015 и в Swift 2.0 можно добавить ограничения на такой протокол, как: protocol SCResourceModel where Self: Hashable {..}
, который непосредственно решает эту проблему (очень приятно).
В любом случае, мой вопрос: могу ли я сделать что-то подобное с текущей версией Swift 1.2 и каким-то образом использовать этот протокол в качестве ключа словаря? Или может кто-нибудь предложить хорошее обходное решение или что-то еще, что я мог упустить?
Единственное решение, которое я вижу на данный момент для Swift 1.2, заключается в преобразовании протокола в класс, который наследуется, например, NSObject и должен быть подклассифицирован для дальнейшего использования в моем API.
Благодарим за помощь!
Вы, наверное, имели в виду Swift 1.2, нет 1,3. Он должен работать как 'protocol SCResourceModel: Hashable {}' Или есть ли ошибка для вас? Если да, покажите свой (минимальный) код – Kametrixom
Я исправил версию :) Ваше предложение не работает, так как это делает 'SCResourceModel'' Hashable' Type. Нельзя использовать это как Тип только как общее ограничение (оно не компилируется). Код уже в этом вопросе. Протокол и словарь, две строки. Дайте мне знать, если у вас есть другие вопросы. – croX