struct Physics {
static let smallCoin : UInt32 = 0x1 << 1
static let smallCoin2 : UInt32 = 0x1 << 2
static let ground : UInt32 = 0x1 << 3
}
这是什么意思
UInt32 = 0x1&lt;&lt; 1?
和静态让?
答案 0 :(得分:5)
<<
是左移算子。您可以更好地以二进制形式显示它:
1 0000 0001
<< 1 ^ shift this one bit to the left
---- = ---------
2 0000 0010
1 0000 0001
<< 2 ^ shift this two bits to the left
---- = ---------
4 0000 0100
3 0000 0011
<< 2 ^ shift this two bits to the left
---- = ---------
12 0000 1100
要记住的另一个属性是x << n = x * (2^n)
。与<<
相反的是>>
- 右移运算符。
答案 1 :(得分:0)
看起来这个问题可能来自物理模拟需要一些常数。整数可能代表吸引力(或类似的)或世界中的一组项目。哪个会很好。
这让我们进入了问题的第一部分:
静态让
将 static let
用于属性的原因有几个:
我们将专注于其中的第一个。
问题是关于 stuct
的,这个 struct
很可能代表常量之类的东西。我在许多项目中都有这个,尽管我通常使用枚举而不是建议的 struct
,格式如下
struct Constants {
static let offset = 10
}
enum {
static let offset = 10
}
结构体和枚举的区别请看this article
这就引出了一个问题,即我们有一个 smallCoin、smallCoin2 的值,并且地面表示为 static let
中的 struct
。
UInt32 = 0x1 << 3
给出的类型(我假设这是一个常量)。这里给出的类型是 UInt32,这意味着该值是一个无符号的 Integer,然后这个值被指定为 0x1 << 1
、0x1 << 2
或 0x1 << 3
,具体取决于我们所指的财产。
要理解这一点,我们需要认识到 0x1
是 hexadecimal,并且表示否认值 1。从那里,我们使用 https://docs.swift.org/swift-book/LanguageGuide/AdvancedOperators.html:
初始值 1,位移 1 后产生值 2。 初始值 1,按 2 位移位创建值 4。 初始值 1,按 3 位移位创建值 8。
现在为什么我们需要像这样对单个值进行位移位并不完全清楚。
因此,Physics.smallCoin = 2、Physics.smallCoin2 = 4 和 Physics.ground = 8