在Swift(iOS应用程序)中,何时需要使用其他整数类型?

时间:2015-12-16 00:31:24

标签: swift

我看到除了Int之外,Swift中有许多整数类型,例如:

Int8
UInt32
uint_fast16_t

我可以理解他们的定义,但我想知道何时/为什么我应该使用它们而不是Int

例如,Int8是一个8位整数。根据我的理解,除非我想节省一些记忆,为什么还要费心呢?

PS。我正在使用Swift进行iOS应用程序开发。

3 个答案:

答案 0 :(得分:4)

与Swift在指针之下的其他方面一样,这些其他数字类型用于特定目的。其中一些目的是:

  • 与C库集成。 C库可能需要特定的C类型,这些类型允许您将数据传入/传出库

  • 非常大的科学数据集。 Float(32位单精度浮点)允许您在与Double相同的空间中保留两倍于内存中的元素,从而牺牲精度。来自卫星传感器,天文数据集等的多日全球环境数据集具有巨大的空间要求。

  • 半精度浮点需要一半 Float的存储和带宽,并且可能与某些图形应用相关

  • 使用Accelerate库进行矢量处理。加速功能适用于各种数字类型,32位单精度准确度可能可用于您希望完成的任务。

答案 1 :(得分:1)

与其他人提到的一样,有时需要与某些外部(C)库进行互操作,或者您只想对允许/检测溢出的值设置约束。

举个例子,考虑一下我前面提到的gist

import UIKit

extension UIColor
{
    convenience init(
        redByte   red:UInt8,
        greenByte green:UInt8,
        blueByte  blue:UInt8,
        alphaByte alpha:UInt8
        )
    {
        self.init(
            red:   CGFloat(red  )/255.0,
            green: CGFloat(green)/255.0,
            blue:  CGFloat(blue )/255.0,
            alpha: CGFloat(alpha)/255.0
        )
    }
}

...当您知道要使用的组件的值为' bytes'时,这是创建UIColor实例的便捷方法。 (0-255范围内的整数),而不是'标准化'漂浮物(即0.0~1.0)。

使用特定类型UInt8而不是Swift的本机Int强制执行策略(并澄清意图),该参数应该是无符号的,8位整数值。

答案 2 :(得分:0)

引用guide

  

对所有通用整数常量和变量使用Int类型   在你的代码中,即使他们被认为是非负面的。 [...] 使用   其他整数类型仅在特别需要时才使用   手头的任务,因为来自外部的明确大小的数据   源,或性能,内存使用或其他必要的   优化。在这些情况下使用显式大小的类型会有所帮助   捕获任何意外的值溢出并隐式记录   正在使用的数据的性质。