这是什么意思每个代码

时间:2016-06-20 01:17:06

标签: ios swift struct sprite-kit swift2

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?

和静态让?

2 个答案:

答案 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 用于属性的原因有几个:

  • 对常量使用静态属性,以及类似的配置
  • 对昂贵的对象使用静态属性,因此您只需为该类型创建一次实例,而不是为该类型创建一个实例,而不是为每个实例创建一次
  • factory 可以使用静态方法创建复杂对象

我们将专注于其中的第一个。

问题是关于 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 << 10x1 << 20x1 << 3,具体取决于我们所指的财产。

要理解这一点,我们需要认识到 0x1hexadecimal,并且表示否认值 1。从那里,我们使用 https://docs.swift.org/swift-book/LanguageGuide/AdvancedOperators.html

enter image description here

初始值 1,位移 1 后产生值 2。 初始值 1,按 2 位移位创建值 4。 初始值 1,按 3 位移位创建值 8。

现在为什么我们需要像这样对单个值进行位移位并不完全清楚。

因此,Physics.smallCoin = 2、Physics.smallCoin2 = 4 和 Physics.ground = 8