如何更改 Swift 中的结构属性
How to change struct properties in Swift
我正在尝试 Swift 游乐场,但找不到更改结构值的方法。下面我想从默认值更改 Shadow 的属性。
我已经尝试了初始化程序和点语法,但我得到“由于内部保护级别,字段无法访问”。
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
您显然在使用“Shapes”游乐场。
因此,通过单击“...”»“高级”»“查看辅助源文件”»“内容”»“模块”»“Book.playgroundmodule”»“来源”»查看源代码“游乐场API”。
如果您查看 Shadow
结构,这些属性中的 none 被声明为 public
。这意味着您无法在该模块之外访问它们。
相反,如果你对比看Circle
声明,radius
就是public。如果您查看 AbstractDrawable
,dropShadow
也是 public
。
在没有显式访问限定符(例如,public
)的情况下,属性 获得 internal
访问限定符,只能在该模块内访问。 (请参阅 The Swift Programming Language: Access Control。)并且您在该操场中的代码与定义 Shadow
的模块不在同一个模块中。因此您无权访问它。
所以,归根结底,你的警告只是告诉你你无法访问 Shadow
struct
.
的这个内部 属性
这引出了一个问题,即为什么他们声明 Shadow
这样您就无法自定义阴影的性质。我怀疑这只是他们的疏忽。例如,我在 Xcode 中打开了这个 playground 工作簿,并将 Shadow
的 init
方法替换为以下内容:
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)
结果是:
我正在尝试 Swift 游乐场,但找不到更改结构值的方法。下面我想从默认值更改 Shadow 的属性。
我已经尝试了初始化程序和点语法,但我得到“由于内部保护级别,字段无法访问”。
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
您显然在使用“Shapes”游乐场。
因此,通过单击“...”»“高级”»“查看辅助源文件”»“内容”»“模块”»“Book.playgroundmodule”»“来源”»查看源代码“游乐场API”。
如果您查看 Shadow
结构,这些属性中的 none 被声明为 public
。这意味着您无法在该模块之外访问它们。
相反,如果你对比看Circle
声明,radius
就是public。如果您查看 AbstractDrawable
,dropShadow
也是 public
。
在没有显式访问限定符(例如,public
)的情况下,属性 获得 internal
访问限定符,只能在该模块内访问。 (请参阅 The Swift Programming Language: Access Control。)并且您在该操场中的代码与定义 Shadow
的模块不在同一个模块中。因此您无权访问它。
所以,归根结底,你的警告只是告诉你你无法访问 Shadow
struct
.
这引出了一个问题,即为什么他们声明 Shadow
这样您就无法自定义阴影的性质。我怀疑这只是他们的疏忽。例如,我在 Xcode 中打开了这个 playground 工作簿,并将 Shadow
的 init
方法替换为以下内容:
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)
结果是: