Swift 数据类型
Swift 提供了非常丰富的数据类型,以下列出了常用了几种数据类型:
Int
一般来说,你不需要专门指定整数的长度。Swift 提供了一个特殊的整数类型Int
,长度与当前平台的原生字长相同:
- 在32位平台上,
Int
和Int32
长度相同。 - 在64位平台上,
Int
和Int64
长度相同。
除非你需要特定长度的整数,一般来说使用Int
就够了。这可以提高代码一致性和可复用性。即使是在32位平台上,Int
可以存储的整数范围也可以达到-2,147,483,648
~2,147,483,647
,大多数时候这已经足够大了。
UInt
Swift 也提供了一个特殊的无符号类型UInt
,长度与当前平台的原生字长相同:
- 在32位平台上,
UInt
和UInt32
长度相同。 - 在64位平台上,
UInt
和UInt64
长度相同。
注意: 尽量不要使用UInt
,除非你真的需要存储一个和当前平台原生字长相同的无符号整数。除了这种情况,最好使用Int
,即使你要存储的值已知是非负的。统一使用Int
可以提高代码的可复用性,避免不同类型数字之间的转换,并且匹配数字的类型推断。
整数类型需要注意以下几点:
在 32 位系统上, Int 和 Int32 长度相同。
在 64 位系统上, Int 和 Int64 长度相同。
在 32 位系统上, UInt 和 UInt32 长度相同。
在 64 位系统上, UInt 和 UInt64 长度相同。
Int8, Int16, Int32, Int64 分别表示 8 位, 16 位, 32 位, 和 64 位的有符号整数形式。
UInt8, UInt16, UInt32, UInt64 分别表示 8 位, 16 位, 32 位 和 64 位的无符号整数形式。
浮点数:Float、Double
浮点数是有小数部分的数字,比如 3.14159
,0.1
和 -273.15
。
浮点类型比整数类型表示的范围更大,可以存储比 Int
类型更大或者更小的数字。Swift 提供了两种有符号浮点数类型:
- Double 表示64位浮点数。当你需要存储很大或者很高精度的浮点数时请使用此类型。
- Float 表示32位浮点数。精度要求不高的话可以使用此类型。
注意:
Double
精确度很高,至少有15位数字,而Float
最少只有6位数字。选择哪个类型取决于你的代码需要处理的值的范围。
布尔值:Bool
Swift 有一个基本的布尔(Boolean)类型,叫做 Bool。布尔值指逻辑上的值,因为它们只能是真或者假。Swift 有两个布尔常量,true 和 false。
字符串:String
字符串是字符的序列集合,例如:
"Hello, World!"
字符:Character
字符指的是单个字母,例如:
"C"
可选类型:Optional
使用可选类型来处理值可能缺失的情况。可选类型表示有值或没有值。
数值范围
下表显示了不同变量类型内存的存储空间,及变量类型的最大最小值:
类型 | 大小(字节) | 区间值 |
---|---|---|
Int8 | 1 字节 | -128 到 127 |
UInt8 | 1 字节 | 0 到 255 |
Int32 | 4 字节 | -2147483648 到 2147483647 |
UInt32 | 4 字节 | 0 到 4294967295 |
Int64 | 8 字节 | -9223372036854775808 到 9223372036854775807 |
UInt64 | 8 字节 | 0 到 18446744073709551615 |
Float | 4 字节 | 1.2E-38 到 3.4E+38 (~6 digits) |
Double | 8 字节 | 2.3E-308 到 1.7E+308 (~15 digits) |
类型别名
类型别名对当前的类型定义了另一个名字,类型别名通过使用 typealias 关键字来定义。语法格式如下:
typealias newname = type
例如以下定义了 Int 的类型别名为 Feet:
typealias Feet = Int
现在,我们可以通过别名来定义变量:
import Cocoa typealias Feet = Int
var distance: Feet =
print(distance)
我们使用 playground 执行以上程序,输出结果为:
类型安全
Swift 是一个类型安全(type safe)的语言。
由于 Swift 是类型安全的,所以它会在编译你的代码时进行类型检查(type checks),并把不匹配的类型标记为错误。这可以让你在开发的时候尽早发现并修复错误。
import Cocoa var varA =
varA = "This is hello"
print(varA)
以上程序,会在 Xcode 中报错:
error: cannot assign value of type 'String' to type 'Int'
varA = "This is hello"
意思为不能将 'String' 字符串赋值给 'Int' 变量。
类型推断
当你要处理不同类型的值时,类型检查可以帮你避免错误。然而,这并不是说你每次声明常量和变量的时候都需要显式指定类型。
如果你没有显式指定类型,Swift 会使用类型推断(type inference)来选择合适的类型。
例如,如果你给一个新常量赋值42并且没有标明类型,Swift 可以推断出常量类型是Int,因为你给它赋的初始值看起来像一个整数:
let meaningOfLife =
// meaningOfLife 会被推测为 Int 类型
同理,如果你没有给浮点字面量标明类型,Swift 会推断你想要的是Double:
let pi = 3.14159
// pi 会被推测为 Double 类型
当推断浮点数的类型时,Swift 总是会选择Double而不是Float。
如果表达式中同时出现了整数和浮点数,会被推断为Double类型:
let anotherPi = + 0.14159
// anotherPi 会被推测为 Double 类型
原始值3没有显式声明类型,而表达式中出现了一个浮点字面量,所以表达式会被推断为Double类型。
import Cocoa // varA 会被推测为 Int 类型
var varA =
print(varA) // varB 会被推测为 Double 类型
var varB = 3.14159
print(varB) // varC 也会被推测为 Double 类型
var varC = + 0.14159
print(varC)
执行以上代码,输出结果为:
3.14159
3.14159
Swift 数据类型的更多相关文章
- Swift数据类型简介
用 Swift 编写 iOS 和 OS X 应用将是一场美妙的体验,Swift 之后也会不断开发新特性和兼容性. Swift 提供了与C.Objective-C的相似的基础数据类型,包含整数Int,浮 ...
- Swift数据类型
1.Swift中常用数据类型:首字母大写 Int.Float.Double.Bool.Character.String Array.Dictionary.元组类型(Tuple).可选类型Optiona ...
- Swift数据类型简介(二)
整数 整数就是没有小数部分的数字,比如42和-23.整数可以是有符号(正.负.零)或者无符号(正.零). Swift 提供了8,16,32和64位的有符号和无符号整数类型.这些整数类型和 C 语言的命 ...
- Swift数据类型及数据类型转换
整型 Swift 提供 8.16.32.64 位形式的有符号及无符号整数.这些整数类型遵循 C 语言的命名规 约,如 8 位无符号整数的类型为 UInt8,32 位 有符号整数的类型为 Int32 ...
- Swift数据类型之整型和浮点型-备
Swift提供8.16.32.64位形式的有符号及无符号整数.这些整数类型遵循C语言的命名规约,我归纳了Swift中的整型: 整型示例: print("UInt8 range: \(UInt ...
- Swift数据类型_整型和浮点型
//swift中的整型和浮点型 /** * //类型推断整数是Int 浮点数是Double ,日常使用需要注意不能越界,存储时间毫秒数 英雄经验数等等之类内容容易越界 整型 大多数情况下,你不需要在代 ...
- 《从零开始学Swift》学习笔记(Day 71)——Swift与C/C++混合编程之数据类型映射
原创文章,欢迎转载.转载请注明:关东升的博客 如果引入必要的头文件,在Objective-C语言中可以使用C数据类型.而在Swift语言中是不能直接使用C数据类型,苹果公司为Swift语言提供与C语言 ...
- iOS开发系列--Swift进阶
概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...
- swift与OC之间不得不知道的21点
swift与OC之间不得不知道的21点 自6月的WWDC大会上由苹果的大神Chris Lattner向我们首次展示swift至今已经大半年时间了,虽然绝大部分软件公司代码里还都见不到一丁点swif ...
随机推荐
- less匹配模式
less里面的匹配模式相当于js里面的if,但又不完全是,比如用css画一个三角 html <div class="sanjiao"></div> less ...
- 大数据之路week06--day01(VMware的下载与安装、安装CentOS)
好了,从今天开始就开始正式的进入大数据道路的轨道上了,当然了,Java 也是需要不断地在日后进行反复地学习,熟练掌握.(这里我要说一下,Java种还有一些I/O流.Lambda表达式和一些常用工具类有 ...
- sql语句中的占位符?有什么作用
String sql = "SELECT userid,name FROM tuser WHERE userid=? AND password=?" ; pstmt = conn. ...
- 四、vue基础--自定义组件
1.语法:Vue.component("组件名字",{data,template}),代码如下: a. data: 必须是一个函数,有一个返回值.和vue里面的使用方法一样 b. ...
- intelij idea 常用插件下载
本文,给大家推荐几款我私藏已久的,自己经常使用的,可以提升代码效率的插件.IDEA插件简介常见的IDEA插件主要有如下几类:常用工具支持Java日常开发需要接触到很多常用的工具,为了便于使用,很多工具 ...
- 基于Mint UI和MUI开发VUE项目一之环境搭建和首页的实现
一:简介 Mint UI 包含丰富的 CSS 和 JS 组件,能够满足日常的移动端开发需要.通过它,可以快速构建出风格统一的页面,提升开发效率.真正意义上的按需加载组件.可以只加载声明过的组件及其样式 ...
- 022_STM32中断优先级分组解析
(0)STM32有十六个优先级 (一)STM32分组为:组0-4 (二)分组配置在寄存器SCB->AIRCR中: (三)解析第二点 1. 组0就是4位都用来设置成响应优先级,2^4=16位都是响 ...
- BSGS ! x
一.引入: 若存在一个式子a^b ≡ c (mod p) (p ≡ 1000000007,且0<a,b,c<p) 已知a,b,求c. 这不就是快速幂嘛! 已知a,c,求b. 这就是我们需 ...
- CTS2019自闭记
没想到吧,我竟然还有一篇游记. Day 0 上午开开心心地考完了中考英语听说考试,然后就出发去机场了. 第一次一个人坐飞机还有点小激动? 7点左右到的北京,到酒店就已经9点了,赶紧跟着hz学长学了一下 ...
- House Lawn Kattis - houselawn
Problem You have just bought a new house, and it has a huge, beautiful lawn. A lawn that needs cutti ...