Одной из причин для разрешения этого упоминаются в SE-0025: Scoped Access Level (курсив):
Компилятор не должен предупредить, когда более широкий уровень контроля доступа используется в пределах типа с более ограничительным доступом, такими как internal
в пределах a private
тип. Это позволяет владельцу типа проектировать доступ, который они будут использовать, чтобы они стали более доступными. (члены до сих пор не могут быть доступны за пределами ограждающих лексической области, потому что сам по себе тип по-прежнему ограничено, т.е. вне кода никогда не будет сталкиваться значение этого типа.)
Таким образом, хотя это не изменяет доступность членов, он позволяет разработчикам сообщать уровень доступа, который, по их мнению, должен иметь данный член, если охватывающий тип имеет более широкий уровень доступа, который может, например, быть полезен для API, которые в настоящее время имеют типы internal
, которые планируется сделать public
в будущий выпуск.
Я согласен, что это должна быть ошибка. Как ни странно, это не распространяется на книгу Apple «Swift Programming Language» под уровнями доступа. – rmaddy
@rmaddy Что вы думаете о моем ответе? –
Я думаю, что цитата в вашем ответе относится к совершенно другой вещи, чем код в вашем вопросе. Например, публичная функция не может вернуть значение с помощью частного типа. – rmaddy