OC与Swift的区别
Swift:容易阅读,结构简单,文件没有了.h.m,类型安全,速度快,运行性能高
swift是oc上提出的,有oc没有的类,如:元组,有泛型
swift定义的常量与变量是没有值的,所以引入了optional可选概念,若没有值,就用optional,比OC中指针设为nil安全
swift的?和!用来标记变量是否可选,!表示可选变量必须保证转换能够成功,?转换不成功不报错,会设为nil,如果转化成功要使用该变量需要后面加!修饰。
swift let声明的常量不可变,var声明的变量可以改变
swift中继承里写final防止被重写,as类型的转换
OC:OC动态性语言,将数据类型的确定由编译时推迟到运行时,swift是静态行语言OC与Swift的区别
Swift:容易阅读,结构简单,文件没有了.h.m,类型安全,速度快,运行性能高
swift是oc上提出的,有oc没有的类,如:元组,有泛型
swift定义的常量与变量是没有值的,所以引入了optional可选概念,若没有值,就用optional,比OC中指针设为nil安全
swift的?和!用来标记变量是否可选,!表示可选变量必须保证转换能够成功,?转换不成功不报错,会设为nil,如果转化成功要使用该变量需要后面加!修饰。
swift let声明的常量不可变,var声明的变量可以改变
swift中继承里写final防止被重写,as类型的转换
OC:OC动态性语言,将数据类型的确定由编译时推迟到运行时,swift是静态行语言
Swift
一、初识
1.不用编写main函数,;号,可以自动推断出变量常量的类型
2.常量只能赋值一次,不要求立即赋值,但使用前必须赋值
3.标识符:不能数字开头,不能包含空白字符,制表符,箭头等特殊字符
4.数据类型:
值类型:枚举(enum):optional
结构体(struct):Bool,Int,Float,Double,Character,String,Array,Dictionary,Set
引用类型:类(class)
5.元组(tuple) _可忽略某个值
let error = (404, "Not Found")
error.0
error.1
二、
1.if else 条件只能是Bool类型,
2.swift3后 ++ --运算已去掉
for循环内i++使用闭区间运算符替换
a...b 相当于 a<=i<=b a..
3.switch 使用fallthrough可贯穿条件
4.where可以过滤条件
5.函数
return可以省略,隐式返回
func pi(v1,v2) —>Double {
v1+v2
}
参数标签 at (_可省略标签)
func work(at time:String) {
//time 内部使用
}
work(at:"08:00") //at 外部使用
默认参数值
func check(name: String = "LiLei", age: Int, job: String = "none") {}
check(age: 15)
一个函数最多只能有一个可变参数
6.print 自带参数 func print(items,separator:String = “ ”,terminator:String = “\n”)//(间隔) (换行)
7.inout函数 在函数内部修改外部参数 (注:inout不能标记可变参数,不能有默认值,本质是地址传递,参数必须可以多次被赋值)
int number = 10
func add(_ num: inout Int) { //inout
num = 20
}
add(&number) //&
8.swap函数 用来交换两个变量
9.函数重载
函数名相同,参数的个数 || 类型 || 标签 不同,与返回值类型无关
10.内敛函数
开启编译器优化(release模式默认开启),编译器自动将某些函数编程内敛函数
func test() {
print("hell world")
}
test()
编译器变为 print("hell world")
不会变内联函数的:函数体太长;包含递归调用;包含动态派发。
11.函数类型
由形式参数类型、返回值类型组成
func test() {} //()—>Void 或者 ()—> ()
fun sum(a: Int , b:Int) —> Int {} //(Int,Int)—> Int
三、汇编
lea 地址传递
call 函数调用
mov 地址移动
()取出地址内的值
%后跟的是寄存器