Вы, очевидно, используете игровую площадку «Shapes».
Итак, просмотрите источник, нажав «...» »« Дополнительно »» «Просмотр вспомогательных исходных файлов» »« Содержание »» « Модули »» «Book.playgroundmodule» »« Источники »» «PlaygroundAPI».
Если вы посмотрите на структуру Shadow
, ни одно из этих свойств не будет объявлено как public
. Это означает, что у вас нет доступа к ним вне этого модуля.
В отличие от этого, если вы посмотрите на объявление Circle
, напротив, radius
будет опубликовано c. И если вы посмотрите на AbstractDrawable
, dropShadow
тоже public
.
При отсутствии явного квалификатора доступа (например, public
) свойство получает квалификатор internal
доступа Доступно только в этом модуле. (См. Язык программирования Swift: Контроль доступа .) И ваш код в этой игровой площадке находится не в том же модуле, где определено Shadow
. Таким образом, у вас нет доступа к нему.
Итак, суть в том, что ваше предупреждение просто говорит вам, что вы не можете получить доступ к этому внутреннему свойству Shadow
struct
.
Возникает вопрос, почему они объявили Shadow
таким, что вы не можете настроить природу тени. Я подозреваю, что это просто недосмотр с их стороны. Например, я открыл эту рабочую тетрадь в XCode и заменил метод init
на Shadow
следующим:
public init(offset: Point = Point(x: 1, y: -1), blurRadius: Double = 1, opacity: Double = 0.3, color: Color = .black) {
self.offset = offset
self.blurRadius = blurRadius
self.opacity = opacity
self.color = color
}
Затем я мог бы снова открыть эту игровую площадку на своем iPad и сделать что-то вроде:
let circle = Circle(radius: 30)
circle.dropShadow = Shadow(opacity: 0.9, color: .green)
И это дало: