Модификатор 'open' конфликтует с доступным по умолчанию расширением 'public' - PullRequest
1 голос
/ 10 апреля 2019

Я создаю настраиваемый компонент, фреймворк, чтобы реализовать его в моих будущих проектах по разработке игр; джойстик.

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

Написание компонента, который отвечает на это поведение, не является большой проблемой; однако я хотел бы делегировать как можно больше «сырого» контроля от пользователя и реализовать методы, которые реагируют на прикосновения, без необходимости вручную переопределять методы UIResponder touchesBegan и т. д.

То, что я сделал, работает до сих пор: я расширил SKScene публичным расширением в рамках, которое переопределяет методы touches и вызывает статические методы, которые обновляют положение джойстика на экране в зависимости от текущего прикосновения и события.

Есть небольшой нюанс, который я пытаюсь решить; вот мой код:

public extension SKScene {
    override open func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesBegan(touches, with: event)

        Joystick.touchesBegan(touches, with: event)
    }
}

XCode хочет, чтобы метод touchesBegan обязательно имел модификатор open, но наименее ограничительный модификатор, который может использовать расширение, - public; XCode выдает предупреждение, которое гласит:

Модификатор 'open' конфликтует с доступным по умолчанию расширением 'public'

Есть ли способ решить эту проблему? Можно ли считать мою реализацию плохим проектом, и если да, то есть ли другой способ достичь этого результата, не заставляя пользователя вручную реализовывать и переопределять методы touches? Спасибо.

...