Swift内置的数字类型及基本的转换方法

 更新时间:2015年11月02日 16:44:21   投稿:goldensun  
这篇文章主要介绍了Swift内置的数字类型及基本的转换方法,是Swift入门学习中的基础知识,需要的朋友可以参考下

虽然编写任何编程语言,需要使用不同的变量来存储各种信息。变量不过是保留的内存位置来存储值。这意味着,当创建一个变量,在内存中会保留一些空间。

可能喜欢像存储字符串,字符,宽字符,整数,浮点数,布尔等各种数据类型的信息。根据一个变量的数据类型,操作系统分配内存,并决定什么可以存储保留在存储器。

内置数据类型
Swift 为程序员提供内置以及用户定义的种类数据类型。 以下是声明变量使用最频繁的基本数据类型的列表:

Int 或 UInt - 这是用于整数。更具体地可以使用Int32,Int64来定义32或64位有符号整数,其中作为UInt32或UInt64用来定义32或64位无符号整数的变量。 For example, 42 and -23.

  • Float - 这是用来表示一个32位浮点数,一般用于使用较小的小数点数字。 例如:3.14159,0.1,和 -273.158。
  • Double - 这是用来表示一个64位浮点数,用于非常大的浮点值。  例如: 3.14159, 0.1, 和 -273.158.
  • Bool - 这代表一个布尔值,真或假。
  • String - 这是有序字符集合。例如, "Hello, World!"
  • Character - 这是一个单字符字符串。例如, "C"
  • Optional - 这表示可以容纳一个值或没有任何值的变量。

有下列有关整数类型要点:

  • 在32位的平台上,Int 大小与 Int32 的大小相同。
  • 在64位的平台上,Int 大小与 Int64 的大小相同。
  • 在32位的平台上,UInt 的大小与 UInt32 的大小相同。
  • 在 64 位的平台上,UInt 的大小与 UInt64 的大小相同。
  • Int8, Int16, Int32, Int64 可以用来表示 8 Bit, 16 Bit, 32 Bit 和 64 Bit 形成有符号整数。

UInt8, UInt16, UInt32 和 UInt64 可以用来表示 8 Bit, 16 Bit, 32 Bit 和 64 Bit 形成无符号整数。
绑定值
下表显示变量类型,需要多少内存存储此值在存储器中,在这种类型的变量可以存储最大值和最小值。

2015112164254153.png (542×301)

类型别名
可以从现有类型使用typealias创建一个新的名称。以下是使用简单 typealias 的语法来定义新类型:

复制代码 代码如下:

typealias newname = type

例如,下面告诉编译器Feet 是 Int 的另一个名字:
复制代码 代码如下:

typealias Feet = Int

现在,下面的声明是完全合法的,并创建一个整型变量为 distance:
复制代码 代码如下:

import Cocoa

typealias Feet = Int
var distance: Feet = 100
println(distance)


当我们使用 playground 运行上面的程序,到以下结果。

100

类型安全
Swift 是一种安全的语言,这意味着,如果代码的一部分需要一个字符串, 那么不能错误地传递一个int。

由于 Swift 是类型安全的,当类型检查时它执行编译代码并标志类型不匹配的错误。

复制代码 代码如下:

import Cocoa

var varA = 42
varA = "This is hello"
println(varA)


当我们编译上面的程序它产生以下编译时错误。
复制代码 代码如下:

Playground execution failed: error: :6:6: error: cannot assign to 'let' value 'varA'
varA = "This is hello"

类型推断
在它编译代码时,类型推断使编译器自动推导出特定表达式的类型, 简单地通过检查所提供的值。Swift 采用类型推断制定出合适的类型如下。
复制代码 代码如下:

 import Cocoa

// varA is inferred to be of type Int
var varA = 42
println(varA)

// varB is inferred to be of type Double
var varB = 3.14159
println(varB)

// varC is also inferred to be of type Double
var varC = 3 + 0.14159
println(varC)


当我们使用 playground 运行上面的程序,得到以下结果。

42
3.14159
3.14159

Swift数字类型之间的转换
Swift数字类型之间的转换Swift是一种安全的语言,对于类型的检查非常严格,不同类型之间不能随便转换。
一、整型之间的转换
在C和Objective-C等其他语言中,整型之间有两种转换方法:
从小范围数到大范围数转换是自动的;
从大范围数到小范围数需要强制类型转换,有可能造成数据精度的丢失。
而在Swift中这两种方法是行不通的,我们需要通过一些函数进行显式地转换,代码如下:

复制代码 代码如下:

let historyScore:UInt8 = 90


let englishScore:UInt16 = 130


let totalScore = historyScore + englishScore  //错误 ①


let totalScore = UInt16(historyScore) + englishScore   //正确 ②


let totalScore = historyScore + UInt8(englishScore)  //正确 ③

上述代码声明和初始化了两个常量historyScore和englishScore,我们把它们相加赋值给totalScore。如果采用第①行代码实现相加,程序就会有编译错误,原因是historyScore是UInt8类型,而englishScore是UInt16类型,它们之间不能转换。
我们有两种转换方法。
一种是把UInt8的historyScore转换为UInt16类型。由于是从小范围数转换为大范围数,这种转换是安全的。代码第②行UInt16(historyScore)就是正确的转换方法。
另外一种是把UInt16的englishScore转换为UInt8类型。由于是从大范围数转换为小范围数,这种转换是不安全的,如果转换的数比较大会造成精度的丢失。代码第③行UInt8(englishScore)是正确的转换方法。由于本例中englishScore的值是130,这个转换是成功的,如果把这个数修改为1300,虽然程序编译没有问题,但是会在控制台中输出异常信息,这是运行期异常。
上述代码中,UInt16(historyScore)和UInt8(englishScore)事实上是构造器,能够创建并初始化另外一个类型。二、整型与浮点型之间的转换
整型与浮点型之间的转换与整型之间的转换类似,因此我们将上一节的示例修改如下:

复制代码 代码如下:

let historyScore:Float = 90.6         ①


let englishScore:UInt16 = 130         ②


let totalScore = historyScore + englishScore  //错误         ③


let totalScore = historyScore + Float(englishScore)  //正确,安全    ④


let totalScore = UInt16(historyScore) + englishScore  //正确,小数被截掉 ⑤


上述代码经过了一些修改,第①行代码historyScore变量类型是Float类型。第②行代码englishScore变量还是UInt16类型。其中第③行代码直接进行了计算,结果有编译错误。第④行代码是将UInt16类型的englishScore变量转换为Float类型,这种转换是最安全的。第⑤行代码是将Float类型的historyScore变量转换为UInt16类型,这种转换首先会导致小数被截掉,另外如果historyScore变量数很大,会导致运行期异常,这与整型之间的转换是类似的。


相关文章

  • Swift中static和class关键字的深入讲解

    Swift中static和class关键字的深入讲解

    这篇文章主要给大家介绍了关于Swift中static和class关键字的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • SwiftUI 引导页界面实现示例

    SwiftUI 引导页界面实现示例

    这篇文章主要为大家介绍了SwiftUI 引导页界面实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • swift版webview加载网页进度条效果

    swift版webview加载网页进度条效果

    这篇文章主要为大家详细介绍了swift实现webview加载网页进度条效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 使用 Swift Package 插件生成代码的示例详解

    使用 Swift Package 插件生成代码的示例详解

    这篇文章主要介绍了使用 Swift Package 插件生成代码,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Swift中通知中心(NotificationCenter)的使用示例

    Swift中通知中心(NotificationCenter)的使用示例

    这篇文章主要给大家介绍了关于Swift中通知中心(NotificationCenter)使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • Swift中使用正则表达式的一些方法

    Swift中使用正则表达式的一些方法

    这篇文章主要介绍了Swift中使用正则表达式的一些方法,Swift语言对正则表达式的支持也在不断改进中,需要的朋友可以参考下
    2015-07-07
  • 深入解析Swift编程中枚举类型的相关使用

    深入解析Swift编程中枚举类型的相关使用

    这篇文章主要介绍了Swift编程中枚举类型的相关使用,是Swift入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • 简单理解插入排序算法及Swift版的代码示例

    简单理解插入排序算法及Swift版的代码示例

    插入排序算法可以在已排序的序列中将要插入的元素和原有元素保持有序,这里我们来简单理解插入排序算法及Swift版的代码示例,需要的朋友可以参考下
    2016-07-07
  • 详解如何在SwiftUI中创建悬浮操作按钮

    详解如何在SwiftUI中创建悬浮操作按钮

    悬浮操作按钮(Floating Action Button, FAB)是一种在 Android 和 Material Design 中使用的 UI 元素,它用于触发特定屏幕的主要操作,下面我们就来详细介绍一下如何在SwiftUI中创建悬浮操作按钮,需要的朋友可以参考下
    2023-10-10
  • LeetCode 题解 Swift 有效的完全平方数

    LeetCode 题解 Swift 有效的完全平方数

    这篇文章主要为大家介绍了LeetCode 题解 Swift 有效的完全平方数方案示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09

最新评论