我正在尝试Swift游乐场,但找不到改变结构值的方法。下面我想从默认值更改阴影的属性。
我尝试了初始化程序和点语法,但由于内部保护级别,我无法访问该字段。
let circle = Circle()
circle.draggable = true
//var shadow = Shadow(color: #colorLiteral(red: 0.9529411764705882, green: 0.6862745098039216, blue: 0.13333333333333333, alpha: 1.0), offset: Point(3,-3), blurRadius: 5, opacity: 1)
var shadow = Shadow()
shadow.color = .red
circle.dropShadow = shadow
您显然正在使用“形状”游乐场。
因此,通过单击“ ...”»“高级”»“查看辅助源文件”»“目录”»“模块”»“ Book.playgroundmodule”»“源”»“ PlaygroundAPI”来查看源。
如果您查看Shadow
结构,则这些属性均不会声明为public
。这意味着您无法在该模块之外访问它们。
[相反,如果对比看Circle
声明,则radius
是公共的。如果您查看AbstractDrawable
,则dropShadow
也是public
。
[在没有显式访问限定符(例如public
)的情况下,属性将获取internal
访问限定符,只能在该模块内访问。 (请参阅The Swift Programming Language: Access Control。)并且该操场中的代码与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)
这产生了: