Я пытаюсь создать протокол для загрузки загрузки JSON, JSONLoaderDelegate
. Мой другой класс, называемый JSONLoader
, предполагается направить события своего делегата (который реализует протокол JSONLoaderDelegate
) как:Невозможно использовать собственный класс в протоколе с атрибутом @objc?
self?.delegate?.jsonLoaderdidEndWithError(self!, error: JSONLoaderError.LoadError)
Реализация JSONLoader не так важно (имхо). Однако я, кажется, есть проблемы для реализации протокола, это код:
@objc protocol JSONLoaderDelegate {
optional func jsonLoaderdidBeginLoading(jsonLoader: JSONLoader)
func jsonLoaderdidEndWithError(jsonLoader: JSONLoader, error: JSONLoader.JSONLoaderError)
func jsonLoaderDidEndWithSuccess(jsonLoader: JSONLoader)
}
Это выглядит довольно просто для меня, но я получаю сообщение об ошибке:
method cannot be marked @objc because the type of the parameter cannot be represented in Objective-C.
указал на все три функции.
Очевидно, что если я удалю атрибут @objc
, я не могу использовать функцию optional
для этой функции. Я бы очень хотел сохранить jsonLoaderdidBeginLoading
как необязательный tho. Любые идеи/способы решения этой проблемы? Спасибо!
Да, ваше предположение верно или, по крайней мере, так оно и есть. Однако, как сделать его совместимым с objc? Добавляю ли я «@objc» перед «class JSONLoader»? – Fygo
Добавьте @objc к его объявлению ... и исправьте все необходимое, чтобы сделать его совместимым (например, нет дженериков). В конце концов, это может быть неправильный подход ... просто для того, чтобы иметь дополнительную функцию в протоколе. Это компромисс, и вам решать, какой из двух вариантов лучше (совместимость с objc или отсутствие дополнительной функции) – Antonio
Да, я вижу, что я не могу сделать enum @objc совместимым. Думаю, я просто избавлюсь от этого необязательного. О, хорошо ... Спасибо за вашу помощь! – Fygo