基本语法
与其他语言的不同点:
类型推断
Swift提供的第一个重大的改进是类型推断。使用了类型推断的编程语言,开发者不需要在声明中明确指定变量的类型。编译器会自动探知要赋给变量的值的类型。比如下面的例子,编译器会自动设定变量的类型为String:
这承托出了Objective-C的一个非常动态的本质。在Objective-C中,任何类型在编译期间都是未知的。这也是为什么你可以在运行时给已经存在的类添加方法,添加一个全新的类型,甚至于改变一个对象的类型。
1. let,var
泛型
如果你对C++很熟悉的花,那么你可以把这些和C++的template做类比。因为Swift是类型严格的,你必须方法可以接受的参数的类型。但是有的时候你的方法对于不同的类型来说作用是相同的。
容器
可变性
字符串
Switch表达式
回调
Enum
Struct,Class,初期化
2.optional
1.??
2.if let,var
3.guard else 作用域
guard的语法详解
3.for 循环 reverse
switch case 作用域,默认break
4.数组,字典
都使用[],遍历,查询,修改,合并,
[NSString:NSobject]
5.闭包 ()->(), oc的block void (^blockname)()
尾随闭包
6.类
属性,getter,setter,计算属性,didset,willset的用法
懒加载跟OC的区别(OC用的是判断别名是否为空,Swift的本质是闭包的延迟调用)
计算属性的本质是等于闭包,在每次调用属性是调用闭包
7.运行时获取属性列表
8.析构,构造
必须要释放的 1.通知,2.NStime,3.kvo
构造函数的继承问题?
便利构造函数?
解决什么问题:
1.检测输入,不符合条件时返回nil,不会耗费内存,2.扩展,统一设置属性
注意什么问题:
不生成对象,需要调用self.init。不能继承重写。
默认构造函数的有效无效问题?
在重载了构造函数的情况下,默认构造函数是无效的。因为构造函数中调用init前需要对值赋值。默认的不会赋值,所以无效。
构造函数(重写,重载),简易构造(extension来扩展)
析构函数哦deinit
:1.定时器nstime,displaylink 2.通知 3.kvo
使用kvc字典转模型需要注意的地方:
1.属性是对象,用option。2.固定类型时,赋值不要用?。3.不要使用private
9.循环引用的问题
闭包的循环引用
发生的条件:
1.在view里,定义了强引用,指向一个闭包 2.在闭包里调用了self。强指向了view
问题:
1.单例模式,在OC和Swift中的写法
2.高级的使用,