当前位置: 首页 > news >正文

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可以提高代码的可复用性,避免不同类型数字之间的转换,并且匹配数字的类型推断。

浮点数

浮点数是有小数部分的数字,比如3.14159,0.1和-273.15。

浮点类型比整数类型表示的范围更大,可以存储比Int类型更大或者更小的数字。Swift 提供了两种有符号浮点数类型:

Double表示64位浮点数。当你需要存储很大或者很高精度的浮点数时请使用此类型。

Float表示32位浮点数。精度要求不高的话可以使用此类型。

注意:
Double精确度很高,至少有15位数字,而Float最少只有6位数字。选择哪个类型取决于你的代码需要处理的值的范围。

布尔值

Swift 有一个基本的布尔(Boolean)类型,叫做Bool。布尔值指逻辑上的值,因为它们只能是真或者假。Swift 有两个布尔常量,true和false。

字符串

字符串是字符的序列集合,例如:

"Hello, World!"
字符

字符指的是单个字母,例如:

"C"
可选类型

使用可选类型(optionals)来处理值可能缺失的情况。可选类型表示有值或没有值。

 

数值范围

下表显示了不同变量类型内存的存储空间,及变量类型的最大最小值:

类型 大小(字节) 区间值
Int8 1 字节 -127 到 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 Cocoatypealias Feet = Intvar distance: Feet = 100print(distance)
我们使用 playground 执行以上程序,输出结果为:

100
类型安全

Swift 是一个类型安全(type safe)的语言。

由于 Swift 是类型安全的,所以它会在编译你的代码时进行类型检查(type checks),并把不匹配的类型标记为错误。这可以让你在开发的时候尽早发现并修复错误。

import Cocoavar varA = 42varA = "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 = 42// meaningOfLife 会被推测为 Int 类型

    
同理,如果你没有给浮点字面量标明类型,Swift 会推断你想要的是Double:

let pi = 3.14159// pi 会被推测为 Double 类型
当推断浮点数的类型时,Swift 总是会选择Double而不是Float。

如果表达式中同时出现了整数和浮点数,会被推断为Double类型:

let anotherPi = 3 + 0.14159// anotherPi 会被推测为 Double 类型
原始值3没有显式声明类型,而表达式中出现了一个浮点字面量,所以表达式会被推断为Double类型。

实例

import Cocoa// varA 会被推测为 Int 类型 var varA = 42print(varA)// varB 会被推测为 Double 类型 var varB = 3.14159print(varB)// varC 也会被推测为 Double 类型 var varC = 3 + 0.14159print(varC)
执行以上代码,输出结果为:

423.141593.14159

     本文选自金丝阁

转载于:https://www.cnblogs.com/zhuwoyao88/p/6565457.html

相关文章:

  • 服务台的工作流程
  • 【深度分解】听趣拍云产品经理剖析视频基础知识(1)
  • windows server 2003 FTP服务器不能下载原因
  • 上火了
  • 干货:让你分分钟学会 JS 闭包
  • jeffcroft/html5 Two thousand twenty two
  • 11种QQ技术 ,让你成为QQ高手
  • springmvc 导出excel
  • iPad是代替笔记本和手机?还是活在夹缝中间?
  • Bing Maps进阶系列九:使用MapCruncher进行地图切片并集成进Bing Maps
  • linux 一些实用工具整理(定期更新)
  • Golang 笔记 3 if、switch、for、select语句
  • [技术][.NET]一步一步学Linq to sql -- Joney Liu博客园整理
  • LNMP环境部署
  • AR28-11路由器QOS限速
  • Google 是如何开发 Web 框架的
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • CSS中外联样式表代表的含义
  • flask接收请求并推入栈
  • HTML5新特性总结
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Webpack 4 学习01(基础配置)
  • win10下安装mysql5.7
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 关于List、List?、ListObject的区别
  • 检测对象或数组
  • 理清楚Vue的结构
  • 聊聊hikari连接池的leakDetectionThreshold
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 我是如何设计 Upload 上传组件的
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (九十四)函数和二维数组
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • *上位机的定义
  • ./configure,make,make install的作用(转)
  • .NET Core 中插件式开发实现
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .net refrector
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 服务 ServiceController
  • .net 流——流的类型体系简单介绍
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [Android]How to use FFmpeg to decode Android f...
  • [C# 基础知识系列]专题十六:Linq介绍
  • [C++]STL之map
  • [C++]打开新世界的大门之C++入门
  • [C++参考]拷贝构造函数的参数必须是引用类型