最近在学习swift,期间也看了很多教程和大神的博客,最后把笔记放这里,方便查看复习~
附上学习资料地址:w3cschool-Swift 教程 、 YungFan大神的简书(推荐看一下,有些知识点总结地简直通俗易懂)
一、基础知识
1、swift与oc的区别
-
分号
:swift不需要末尾添加分号,除非几行代码连写在一行的情况 -
空格格式
:swift非常注重格式,a = 1
与b=2
注意等号两边空格的格式必须一致 -
方法调用
:oc中[Person saveCall];
;swift中person.saveCall
类似oc的点语法 -
头文件
:swift不需要导入头文件就可以引用其他类的方法和属性 -
枚举类型
:可以简写,直接.枚举值
-
self
:在当前类中访问属性或者方法,可以省略self.
-
构造函数
:oc中[[Person alloc] initWithName:xxx]
-> swift中Person(name:xxx)
-
#selector
:oc中是@selector
,swift中是#selector
2、类型安全
Swift是一个类型安全(type safe)的语言。
即:用var来声明了一个变量,只能修改对应类型下的值,不能修改数据类型。编译的时候会进行类型检查
,不匹配的地方会报错。
var a = 12
a = "hello" //定义的是int类型,不能改变类型
3、类型推断
用let声明一个常量 或者 用var声明一个变量的时候,在直接赋值的情况下,可以它的省略类型。swift会通过类型推断
来选择合适的类型
let a = 100
let b = 3.14
let c = "hello"
注意:如果没有给浮点字面量标明类型,swift会自动推断为Double类型:
let a = 3.14159
print(type(of: a))//Double
let b = 3 + 0.14159
print(type(of: b))//Double
4、类型别名
与oc用法一样,但关键字使用 typealias
来修饰
//声明
typealias abc = Int
//调用
let a: abc = 100
二、数据类型
1、整型
- Int(有符号整形:正数、零、负数)
- UInt(无符号整形:正数、零)
注意事项:
一般不需要设置特定的 Int8, Int16。只写一个 Int,长度与操作系统有关,好比在32位系统上,写一个 Int 就和 Int32 一样。 UInt 也一样
Int8, Int16, Int32, Int64 分别表示 8 位, 16 位, 32 位, 和 64 位的有符号整数形式。
UInt8, UInt16, UInt32, UInt64 分别表示 8 位, 16 位, 32 位 和 64 位的无符号整数形式。
整数范围:
可以通过 min 和 max 属性来访问每个整数类型的最小值和最大值:
let minValue = UInt8.min // 最小值是 0, 值的类型是 UInt8
let maxValue = UInt8.max // 最大值是 255, 值得类型是 UInt8
2、浮点
- Double 代表 64 位的浮点数。
- Float 代表 32 位的浮点数。
注意事项:
Double 有至少 15 位数字的精度,而 Float 的精度只有 6 位。具体使用哪种浮点类型取决于代码需要处理的值范围。在两种类型都可以的情况下,推荐使用 Double 类型。
3、布尔值
Bool,两个布尔常量:true、false
4、字符串&字符
- 字符串:String
- 字符:Character,指单字符
代码示例:
//写法1:常量
let a:Int = 10
//写法2:swift会进行类型推断,可以省略
let b = 12
//写法3:变量,可以修改值
var c = 20
c = 25
let d:Float = 3.14 //指定Float类型
let e = 3.15 //默认Double类型
var f = 3.16 //默认Double类型
f = 3.17
三、字面量
所谓字面量,就是指像特定的数字,字符串或者是布尔值这样,能够直接了当地指出自己的类型并为变量进行赋值的值。比如:
let aNumber = 3 //整型字面量
let aString = "Hello" //字符串字面量
let aBool = true //布尔值字面量
- 整型字面量 整型字面量可以是一个十进制、二进制、八进制、十六进制常量
以下都是17的不同进制表示:
//十进制
let decimalInteger = 17
//二进制,前缀:0b
let binaryInteger = 0b10001
//八进制,前缀:0o
let octalInteger = 0o21
// 16进制,前缀:0x
let hexadecimalInteger = 0x11
- 浮点型字面量 组成:整数部分、小数点、小数部分、指数部分 默认是10进制,也可以用16进制(加前缀0x)
10进制和exp指数
十进制数与 exp 的指数,结果就等于基数乘以 10exp:
1.25e2 意味着 1.25 x 10^2, 或者 125.0
1.25e-2 意味着 1.25 x 10^-2, 或者 0.0125
16进制和exp指数
十六进制数与 exp 指数,结果就等于基数乘以2exp:
0xFp2 意味着 15 x 2^2, 或者 60.0 .
0xFp-2 意味着 15 x 2^-2, 或者 3.75 .
以12.1875为例
let decimalDouble = 12.1875
let exponentDouble = 1.21875e1
let hexadecimalDouble = 0xC.3p0
注意:
数值类型的字面量,可以添加 0 或者 _ 来增加可读性
let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1
-
字符串字面量 字符串型字面量中不能包含未转义的双引号 (")、未转义的反斜线(\)、回车符或换行符。
-
布尔值字面量 布尔型字面量的默认类型是 Bool。布尔值字面量有三个值,它们是 Swift 的保留关键字:
true 表示真。
false 表示假。
nil 表示没有值。
四、常量
1、命名规则:
- let修饰
- 字母、下划线开头
- 区分大小写,算2个变量
- 可以使用简单的 Unicode 字符,如:汉子、表情
let a : Int = 10
let a = 10
let _a = 10
let view : UIView = UIView()
2、注意:
- let修饰的,是不可变的
- 我们用let修饰的常量是一个类, 我们可以对其所在的属性进行修改
- 常量不可以修改的意思是
指针不可以再指向其他对象
,但是可以通过指针拿到对象,修改其中的属性
五、变量
1、 命名规则:
- var修饰
- 字母、下划线开头
- 区分大小写,算2个变量
- 可以使用简单的 Unicode 字符,如:汉子、表情
var _a = "hello"
var b = "hello"
var B = "hello"
var 你好 = "hello"
2、 输出:
print(_a)
print(b)
print(你好)
print(_a,b,你好)
print("见面要说\(_a)")
3、注意:
- 我们不会用
var
去引用一个类, 也没有必要 - 为了更加安全,建议先定义常量,如果需要修改再修改为变量
六、特殊运算符
这里只说一个不太常见的:
===
和!==
:测试一个实例的运行时类型和它的编译时类型是否一致
if someInstance.dynamicType === someInstance.self {
print("The dynamic and static type of someInstance are the same")
} else {
print("The dynamic and static type of someInstance are different")
}