- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用一个静态结构来命名我的应用程序的常量。实际上,它们不是常量而是变量,因此稍后用户可以更改其中的一些。
其中很多是依赖于字体大小的指标,因此结构中嵌套了另一个结构,它保存了相对于字体大小的所需大小,但是每当应用程序访问这些常量之一时,最终值计算得出。
这是一个小代码示例:
public struct ApplicationConstants {
public static var fontSize: Double = 24
public struct RelativeSize {
public var size: Double
public init(_ size: Double) {
self.size = size
}
public var double: Double {
return size * fontSize
}
}
public static var offsetAfterBulletPoint: RelativeSize = RelativeSize(0.3)
}
print(ApplicationConstants.offsetAfterBulletPoint.double) // returns 7.2
ApplicationConstants.fontSize = 16
print(ApplicationConstants.offsetAfterBulletPoint.double) // returns 4.8
为了更好的可读性,我更愿意在不显式调用 .double 计算属性的情况下访问结果值,如下所示:
print(ApplicationConstants.offsetAfterBulletPoint)
因为此值是应用程序本身唯一需要的值。存储的相对于字体大小的值仅用于在可能的首选项 Pane 中显示,其中与字体大小的关系比结果值更容易理解。
我可以直接将值存储为 double 值并在初始化时进行计算:
public static var offsetAfterBulletPoint: Double = fontSize*0.3
但是我必须在 fontSize var 中实现一个 willSet 观察器,以便在字体大小发生变化时重新计算每个与字体相关的值。在我的应用程序中可能会有 100 个这样的字体相关值。
那么,是否有协议(protocol)或其他东西可以使我的嵌套 RelativeSize 结构的 .double var 成为一种“第一响应属性”,在调用变量而不指定成员时将返回该属性,以便它的行为如果它是原始的?
最佳答案
在你的情况下我会做这样的事情:
public struct ApplicationConstants {
public static var fontSize: Double = 24
public struct RelativeSize {
public var size: Double
public init(_ size: Double) {
self.size = size
}
public var double: Double {
return size * fontSize
}
}
private static var _offsetAfterBulletPoint: RelativeSize = RelativeSize (0.3)
public static var offsetAfterBulletPoint : Double {
get {
return _offsetAfterBulletPoint.double
} set {
_offsetAfterBulletPoint = RelativeSize(newValue)
}
}
}
然后得到的时候就会得到计算出来的值。如果你设置,你可以设置相对大小初始化:
print(ApplicationConstants.offsetAfterBulletPoint) // prints 7.2
ApplicationConstants.offsetAfterBulletPoint = 0.4
print(ApplicationConstants.offsetAfterBulletPoint) // prints 9.6
或者如果您不喜欢使用相同的属性来设置和获取您的值,您可以尝试使用变量
关于swift:类或结构是否可以具有一种无需点符号即可访问的 "main"属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54484140/
这实际上是我问的问题的一部分here ,该问题没有得到答复,最终被标记为重复。 问题:我只需使用 @Autowired 注释即可使用 JavaMailSender。我没有通过任何配置类公开它。 @Co
我是一名优秀的程序员,十分优秀!