文章目录
  1. 1. 常量和变量
  2. 2. 输出常量和变量
  3. 3. 注释
  4. 4. 分号
  5. 5. 整数
    1. 5.1. 整数范围
    2. 5.2. Int
  6. 6. 浮点数
  7. 7. 类型安全和类型推断
  8. 8. 数值型字面量
  9. 9. 类型别名
  10. 10. 元组
    1. 10.1. 元组分解
  11. 11. 可选值(Optional)
    1. 11.1. if语句及强制解析
    2. 11.2. 可选绑定
    3. 11.3. nil
    4. 11.4. 隐式解析可选类型
  12. 12. 断言
    1. 12.1. 使用断言进行调试
    2. 12.2. 何时使用断言
  13. 13. 基本运算符
    1. 13.1. 数值运算符
    2. 13.2. 数值运算
    3. 13.3. 求余运算
    4. 13.4. 浮点数求余计算
  14. 14. 自增和自增运算
  15. 15. 复合赋值(Compound Assignment Operators)
  16. 16. 比较运算
  17. 17. 三元条件运算(Ternary Conditional Operator)
  18. 18. 区间运算符
    1. 18.1. 闭区间运算符
    2. 18.2. 半闭区间
  19. 19. 逻辑运算

基础部分
数据类型基于C和Objective-C的基础上提出,Int是整形,DoubleFloat是浮点型,Bool是布尔型,String是字符串。Swift还有两个集合类型ArrayDictionary
除了我们熟悉的类型,Swift 还增加了 Objective-C 中没有的类型比如元组(Tuple)。元组可以让你创建或者传递一组数据,比如作为函数的返回值时,你可以用一个元组可以返回多个值。
Swift 还增加了可选(Optional)类型,用于处理值缺失的情况。可选表示“那儿有一个值,并且它等于 x ”或者“那儿没有值”。可选有点像在 Objective-C 中使用nil,但是它可以用在任何类型上,不仅仅是类。可选类型比 Objective-C 中的nil指针更加安全也更具表现力,它是 Swift 许多强大特性的重要组成部分。
Swift 是一个类型安全的语言,会阻止不正确的值传递。

常量和变量

常量和变量必须在使用前声明,用let来声明常量,用var来声明变量。

1
2
let a = 10
var b = 1

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

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

类型标注,在声明常量和变量的时候加上类型标注,说明变量或者常量要存储的类型。

1
var str:String

变量名不能包含数学符号,箭头,保留的关键字,Unicode码位,连线和制表符。不能以数字开头。

输出常量和变量

使用println函数来输出当前的变量或常量的值:

1
println(myValue)

使用\()语法可以将值转换成字符串类型

1
println("I have a value -- \(myValue)")

注释

与C语言相通,可以使用//,/*做单行、多行注释,也可以嵌套

1
2
3
4
5
6
7
8
// 单行注释
/*
多行注释
*/
/* 嵌套
/* 注释 */
* 嵌套
*/

分号

Swift 并不强制要求你在每条语句的结尾处使用分号(;),同一行内写多条独立的语句则必须加上分号

1
let cat = "pop";println(cat)

整数

整数可以是有符号的或者无符号的
如8位无符号整数的类型是UInt8,32位有符号的整数是Int32

整数范围

可以根据不同数据类型的minmax来获取对应的最大值和最小值

1
2
let minValue = UInt8.min
let maxValue = UInt8.max

Int

长度默认与平台的原生字长相同

  • 在32位平台上,IntInt32长度相同。
  • 在64位平台上,IntInt64长度相同。

浮点数

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

类型安全和类型推断

Swift 是一个类型安全(type safe)的语言。不匹配的类型会被标记为错误。

1
2
3
4
5
let meaningOfLife = 42
// meaningOfLife 会被推测为 Int 类型
//如果你没有给浮点字面量标明类型,Swift 会推断你想要的是Double:
let pi = 3.14159
// pi 会被推测为 Double 类型

数值型字面量

  • 一个十进制数,没有前缀
  • 一个二进制数,前缀是0b
  • 一个八进制数,前缀是0o
  • 一个十六进制数,前缀是0x

如果一个十进制数的指数为exp,那这个数相当于基数和10^exp的乘积:

  • 1.25e2 表示 1.25 × 10^2,等于 125.0。
  • 1.25e-2 表示 1.25 × 10^-2,等于 0.0125。

如果一个十六进制数的指数为exp,那这个数相当于基数和2^exp的乘积:

  • 0xFp2 表示 15 × 2^2,等于 60.0。
  • 0xFp-2 表示 15 × 2^-2,等于 3.75。

类型别名

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

1
typealias AudioSample = UInt16

元组

元组(tuples)把多个值组合成一个复合值。元组内的值可以使任意类型,并不要求是相同类型。

1
let http404Error = (400,"Not Found")

元组分解

1
2
let (statusCode,statusMessage) = http404Error
println(statusCode) //输出404

也可以使用一部分元组,忽略的部分使用下划线(_)标记

1
let (statusCode,_) = http404Error

也可以实现下标访问单个元素

1
let statusCode = http404Error.0

可以定于元组的时候给单个元素命名

1
2
let http200Status = (statusCode:200,description:"OK")
println(http200Status.statusCode)

可选值(Optional)

使用可选值来处理值可能缺失的情况

1
2
// 设置num是一个可选值,并赋值为3
let num? Int = 3

if语句及强制解析

if语句可以判断一个可选值是否包含值,如果可选类型有值返回ture,没有值返回false

1
2
3
4
// num为一个可选值
if var value = num {
// 有值
}

确定可选类型包含值后,可以再可选的名字后面加上感叹号(!)来获取值。
这个感叹号表示:我知道这个可选值有值,请使用它

1
num!.toString()

可选绑定

使用可选绑定来判断可选类型是否包含值,如果包含就把赋值给一个临时常量或者变量。

1
if let temp = someOptional

nil

可以给可选变量赋值为nil来表示它没有值

1
2
var someOptinal:Int? = nil
someOptinal = 3

如果在声明可选变量或常量的时候没有赋值,默认设置为nil

隐式解析可选类型

改用感叹号来声明一个隐式解析可选类型,隐式可选类型就是一个普通的可选类型,但是可以被当做非可选类型来使用,并不需要每次都解析来获取值。

1
2
let value : String! = "Hello"
println(value) // 不需要value!

隐式解析可选类型主要被用作Swift中类的构造过程
隐式解析可选类型可以被当做普通可选类型来判断它是否有值

1
2
3
if value {
// 有值
}

断言

断言用作出结束代码运行并通过调试来找到原因

使用断言进行调试

断言会在运行时判断一个逻辑条件是否为true,当条件为真,运行某段代码,条件为假,代码运行停止,应用被终止
例如使用全局assert函数来写一个断言,向assert函数传入一个结果为true或者false的表达式以及一条信息,当表达式为false的时候这条信息会被显示

1
2
3
let age = -3
assert(age >= 0,"岁数不能小于0")
// 断言会被触发

何时使用断言

当条件可能为假时使用断言,但是最终一定要保证条件为真,这样代码才能继续运行,断言的适用场景

  • 整数类型的下标索引被传入一个自定义下标脚本实现,但是下标索引可能太小或者太大
  • 需要给函数传入一个值,但是非法的值可能导致函数不能正常运行
  • 一个可选值现在是nil,但是后续的代码运行时需要一个非nil

基本运算符

Swift支持大部分标准C语言的运算符,且改进许多特性来减少常规的编码错误,如:赋值符(=)不返回值,以防止把想要判断相等运算符(==)的地方写错导致赋值的错误。数值运算符(+,-,*,、,%)会检测并不允许值溢出。允许使用Swift的溢出运算符来实现溢出。
区别于C语言,在Swift中可以对浮点数进行取余运算(%),Swift还提供了表达两数之间的值的区间的运算符(a..ba...b)表达一个区间的数值。

数值运算符

赋值表达用一个值来初始化或更新变量或常量

1
2
3
let b = 10;
var a = 5;
a = b

但赋值不返回任何值

1
2
3
if x = y {
// 此句错误,因为x = y表达式不返回值
}

数值运算

  • 加法(+)
  • 减法(-)
  • 乘法(*)
  • 除法(/)
    Swift默认不允许数值运算中出现溢出情况,但是可以使用溢出运算符来达到有目的的溢出(如a &+ b)
    加法可以用于String的拼接
    1
    "heloo" + " world"

两个Character值或一个String和一个Character值,相加会生成一个新的String值

求余运算

1
2
9 % 4 // 等于1
-9 % 4 // 等于-1 4*(-2)+(-1) = 9

浮点数求余计算

1
8 % 2.5 // 等于0.5

自增和自增运算

和 C 语言一样,Swift 也提供了方便对变量本身加1或减1的自增(++)和自减(–)的运算符。其操作对象可以是整形和浮点型。

  • 当++前置的时候,先自増再返回。
  • 当++后置的时候,先返回再自增。

    复合赋值(Compound Assignment Operators)

    Swift也提供把其他运算符和赋值运算符组合的复合赋值运算符
    1
    2
    var a = 1
    a += 2 // a = 3

比较运算

  • 等于(==)
  • 不等于(!=)
  • 大于(>)
  • 小于(<)
  • 大于等于(>=)
  • 小于等于(<=)
    Swift还提供了恒等于===和恒不等于!==来比较两个对象是否饮用同一个对象的实例

    三元条件运算(Ternary Conditional Operator)

    问题 ? 答案1 : 答案2,如果问题成立,返回答案1的结果; 如果不成立,返回答案2的结果。
    1
    let value = (boolValue ? 10 : 30)

三元条件运算提供有效率且便捷的方式来表达二选一的选择。

区间运算符

闭区间运算符

a...b定义了一个包含从ab所有值的区间,闭区间运算符在迭代一个区间的所有值时非常有用,比如for-in循环中:

1
2
3
for index in 1...5{
//
}

半闭区间

a..b定义了一个从ab但不包括b的区间。

1
2
3
4
5
let names = ["Anna","Alex","Brian","Jack"]
let count = name.count
for i in 0..count {
//
}

逻辑运算

  • 逻辑非(!)
  • 逻辑与(&&)
  • 逻辑或(||)
文章目录
  1. 1. 常量和变量
  2. 2. 输出常量和变量
  3. 3. 注释
  4. 4. 分号
  5. 5. 整数
    1. 5.1. 整数范围
    2. 5.2. Int
  6. 6. 浮点数
  7. 7. 类型安全和类型推断
  8. 8. 数值型字面量
  9. 9. 类型别名
  10. 10. 元组
    1. 10.1. 元组分解
  11. 11. 可选值(Optional)
    1. 11.1. if语句及强制解析
    2. 11.2. 可选绑定
    3. 11.3. nil
    4. 11.4. 隐式解析可选类型
  12. 12. 断言
    1. 12.1. 使用断言进行调试
    2. 12.2. 何时使用断言
  13. 13. 基本运算符
    1. 13.1. 数值运算符
    2. 13.2. 数值运算
    3. 13.3. 求余运算
    4. 13.4. 浮点数求余计算
  14. 14. 自增和自增运算
  15. 15. 复合赋值(Compound Assignment Operators)
  16. 16. 比较运算
  17. 17. 三元条件运算(Ternary Conditional Operator)
  18. 18. 区间运算符
    1. 18.1. 闭区间运算符
    2. 18.2. 半闭区间
  19. 19. 逻辑运算