я должен выполнить требование в протокол, который определен в Objective-C, как это:Как использовать NSSet <Class> в Swift (экспортируется как Set <NSObject>)?
@protocol AProtocol <NSObject>
+ (NSSet<Class> * _Nullable)someClasses;
@end
Я хочу реализовать этот протокол в подклассе написанном в Swift. Я хочу вернуть набор классов другого объекта. Класс я хочу вернуться, определяется следующим образом:
class B: NSObject {}
класс, который соответствует протоколу определяется следующим образом:
class A: NSObject, AProtocol {
static func someClasses() -> Set<NSObject>? {
return [B.self]
}
}
Почему NSSet<Class>
мостиком Set<NSObject>
вместо набора?
Это решение рушится, как я могу решить проблему?
Один вопрос, я не вижу, как возвращается 'Set?' Выполняет 'NSSet ' тип возврата в протоколе. Не должно быть 'Set '? Кроме того, пожалуйста, укажите декларацию для типа AppDelegate. –
@PatrickGoley да, я полностью понимаю путаницу, это тоже смутило меня. Как мне объяснил кто-то: Class - это всего лишь объект Objective-C, поэтому он подобен этому. Я думаю, что они соединяют его в других случаях с AnyClass, но поскольку AnyClass не соответствует Hashable (что является предварительным условием для Set), это было невозможно. Xcode создает интерфейс для протокола, как это. AppDelegate только что генерируется Xcode, я добавляю его в исходное сообщение. – Ben
Хорошо, проблема сама по себе решена, я отредактирую вопрос и добавлю ответ, возможно, это полезно для других. – Ben