gpt4 book ai didi

swift:类或结构是否可以具有一种无需点符号即可访问的 "main"属性?

转载 作者:行者123 更新时间:2023-11-28 11:38:22 27 4
gpt4 key购买 nike

我正在使用一个静态结构来命名我的应用程序的常量。实际上,它们不是常量而是变量,因此稍后用户可以更改其中的一些。

其中很多是依赖于字体大小的指标,因此结构中嵌套了另一个结构,它保存了相对于字体大小的所需大小,但是每当应用程序访问这些常量之一时,最终值计算得出。

这是一个小代码示例:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com