swift 类型

变量声明

用let来声明常量,用var来声明变量
可以在一行中声明多个常量或者多个变量,用逗号隔开

    var x = 0.0, y = 0.0, z = 0.0

类型安全

Swift 是一个类型安全(type safe)的语言。类型安全的语言可以让你清楚地知道代码要处理的值的类型。
一个变量是什么类型,通过两种方式来表达:

类型标注
类型标注表示这个变量可以存储某种类型的值,声明中的冒号代表着“是...类型”:

            var welcomeMessage: String
        
类型推断
如果你没有显式指定类型,Swift 会使用类型推断(type inference)来选择合适的类型。有了类型推断,编译器可以在编译代码的时候自动推断出表达式的类型。原理很简单,只要检查你赋的值即可。

注意:当推断浮点数的类型时,Swift 总是会选择Double而不是Float。一般来说你很少需要写类型标注。如果你在声明常量或者变量的时候赋了一个初始值,Swift可以推断出这个常量或者变量的类型

变量命名

  • 当你将常量或者变量声明为确定的类型,你就不能使用相同的名字再次进行声明,或者改变其存储的值的类型
  • 如果你需要使用与Swift保留关键字相同的名称作为常量或者变量名,你可以使用反引号(`)将关键字包围的方式将其作为名字使用。
  • 常量的值一旦被确定就不能更改了。尝试这样做会导致编译时报错

打印变量和常量

println是一个用来输出的全局函数,输出的内容会在最后换行。
xcode的playground使用println,点击工具条的show the Assistant editor.即能显示输出

  var str = "Hello, playground"
println(str)

类型转换

SomeType(ofInitialValue)是调用 Swift 构造器并传入一个初始值的默认方法。
注意,你并不能传入任意类型的值,只能传入SomeType内部有对应构造器的值。
不过你可以扩展现有的类型来让它可以接收其他类型的值(包括自定义类型)

不同整数类型的变量和常量可以存储不同范围的数字,如果数字超出了常量或者变量可存储的范围,编译的时候会报错:

  let cannotBeNegative: UInt8 = -1
// UInt8 类型不能存储负数,所以会报错
let tooBig: Int8 = Int8.max + 1
// Int8 类型不能存储超过最大值的数,所以会报错 let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
//在语言内部,UInt16有一个构造器,可以接受一个UInt8类型的值,所以这个构造器可以用现有的UInt8来创建一个新的UInt16
let twoThousandAndOne = twoThousand + UInt16(one)

类型别名

类型别名(type aliases)就是给现有类型定义另一个名字。你可以使用typealias关键字来定义类型别名。

  typealias AudioSample = UInt16
var maxAmplitudeFound = AudioSample.min
// maxAmplitudeFound 现在是 0

断言

可以使用断言来保证在运行其他代码之前,某些重要的条件已经被满足。
如果条件判断为true,代码运行会继续进行;如果条件判断为false,代码运行停止,你的应用被终止。

let age = -3
assert(age >= 0, "A person's age cannot be less than zero")
// 因为 age < 0,所以断言会触发,代码运行停止,应用被终止

可以做调试使用

整型 Int

Swift 提供了8,16,32和64位的有符号和无符号整数类型。
Swift 提供了一个特殊的整数类型Int,长度与当前平台的原生字长相同:

  • 在32位平台上,Int和Int32长度相同。
  • 在64位平台上,Int和Int64长度相同。

Swift 也提供了一个特殊的无符号类型UInt,长度与当前平台的原生字长相同:

  • 在32位平台上,UInt和UInt32长度相同。
  • 在64位平台上,UInt和UInt64长度相同。

尽量不要使用UInt,除非你真的需要存储一个和当前平台原生字长相同的无符号整数。
除了这种情况,最好使用Int,即使你要存储的值已知是非负的。
统一使用Int可以提高代码的可复用性,避免不同类型数字之间的转换,并且匹配数字的类型推断

浮点型 Double和Float

  • Double表示64位浮点数。当你需要存储很大或者很高精度的浮点数时请使用此类型。
  • Float表示32位浮点数。精度要求不高的话可以使用此类型。

布尔型 Bool

Swift 有两个布尔常量,true和false:

  let orangesAreOrange = true
let turnipsAreDelicious = false

字符窜 String 和 Character(字符)

Swift 的String类型表示特定序列的Character(字符)类型值的集合,不能用下标取

  for character in "Dog!												

swift 类型.的更多相关文章

  1. Swift类型检查与转换

    继承会发生在子类和父类中,如图所示,是一系列类的继承关系类图,Person是类层次结构中的根类,Student是Person的直接子类,Worker是Person的直接子类.这个继承关系类图的具体实现 ...

  2. Swift—类型检查与转换-备

    继承会发生在子类和父类之间,是一系列类的继承关系. 例如:Person是类层次结构中的根类,Student是Person的直接子类,Worker是Person的直接子类. 这个继承关系类的具体实现代码 ...

  3. Swift - 类型判断is 与 类型转换as

    在Swift中,通常使用is和as操作符来实现类型检查和转换.下面通过样例来演示使用方法,首先定义几个类. 1 2 3 4 5 6 7 8 9 10 11 //基类,人类 class Human{ } ...

  4. Swift类型推测在可选调用中的小提示

    我们知道Swift中协议里也有对应于Objc中的可选方法或计算属性,当然协议必须以@objc伪指令修饰否则不可以哦. 如下示例: @objc protocol Transaction{ fun com ...

  5. Swift 类型桥接

    前言 iOS 中的 API 基本都是在许多年前由 OC 写成的,现在通过桥接的方法在 Swift 中可以用,基本看不出区别,非常自然.但是一些特殊的类型,在两种语言进行桥接的时候需要特别注意. 1.N ...

  6. Swift 类型嵌套

    1.类型嵌套 Swift 支持类型嵌套,把需要嵌套的类型的定义写在被嵌套的类型的 {} 中. Swift 中的枚举类型可以辅助实现特定的类或者结构体的功能. struct SchoolUniform ...

  7. swift类型擦除的定义-swift的类型擦除只是一个类型高低阶转换的游戏。

    所谓swift的类型擦除是指: moand转换: 通过技术手段(通常是包装器),将具体类型的类型信息擦除掉了,只将类型的(某一个侧面的)抽象信息(通常指的是类型尊从的协议.接口.或基类)暴露出来. A ...

  8. Swift 类型检查与类型转换

    前言 在 Swift 语言中一般使用 is 关键字实现类型检查,使用 as 关键字实现类型转换,除此之外还可以通过构造器和方法来实现类型转换. 1.类型检查 1.1 使用 is 检查 类型检查操作符 ...

  9. Swift 类型别名

    类型别名 在 Swift 语言中使用 typealias 关键字定义类型别名. typealias ShortInteger = Int8

随机推荐

  1. 机器学习: 神经网络中的Error函数

    利用神经网络做分类的时候,可以将神经网络看成一个mapping function,从输入到输出经过复杂的非线性变换.而输出的预测值与实际的目标值总是存在一定偏差的,一般利用这种偏差建立error 函数 ...

  2. Oracle 乱码或则中文无法正确查询问题

    解决Oracle本身的字符集问题 oracle数据库的字符集更改 A.oracle server 端 字符集查询 select userenv('language') from dual 其中NLS_ ...

  3. 【OpenMesh】Training:Getting Started with OpenMesh

    内容出自236329 - Digital Geometry Processing, Spring2013 - Announcements上的OpenMesh Assignment感觉比较好,适合刚开始 ...

  4. 网络驱动移植之解析Linux网络驱动的基本框架

    内核源码:linux-2.6.38.8.tar.bz2 概括而言,编写Linux网络驱动其实只要完成两件事即可,一是分配并初始化网络设备,二是注册网络设备. 1.分配并初始化网络设备 动态分配网络设备 ...

  5. linux ping IP地址与telnet 测试IP端口

    ping命令是不能够测试端口的,ping只是测试网络联接状况以及信息包发送和接收状况. 格式:ping IP地址或主机名 [-t] [-a] [-n count] [-l size] 参数含义:-t不 ...

  6. Voice Commands (VCD) Cortana 微软小娜示例

    Cortana 样品 您可以创建自定义功能Cortana使用Cortana技能装备或遗留的声音命令(VCD)平台. 在这里,你可以找到相关的样品: Cortana技能装备 目前Cortana技巧是建立 ...

  7. Mac怎样改动开机password

    Mac开机password忘了,咋办?开不开机啦 1.打开你的Mac,command +S 进入你的终端界面 2.输入/sbin/mount -uaw / 3.输入rm /var/db/.AppleS ...

  8. 算法笔记_142:无向图的欧拉回路求解(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 John's trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8 ...

  9. Android画布更新过程OnDraw调用过程

    onDraw是触发的外置接口,用户能够复写这种方法,这样当回调onDraw时,就能够绘制出用户须要的画面 这个接口方法相似onLayout的回调,利用layout(l,t,r,b)就能够触发. 而这里 ...

  10. 深入理解MapReduce的架构及原理

    1. MapReduce 定义 Hadoop 中的 MapReduce是一个使用简单的软件框架.基于它写出来的应用程序能够执行在由上千个商用机器组成的大型集群上,并以一种可靠容错式并行处理TB级别的数 ...