swift基础目录
- class和struct区别
- swift扩展
- Set独有的方法
- map,filter,reduce作用
- map和flatmap 的区别
- 什么是 copy on write?
- guard使用场景
- defer 使用场景
- string和nsstring区别
- 什么时候使用 final
- dynamic 的作用
- 什么时候使用 @objc
- swift相对于oc优点
- swift中的closure于OC中block的区别?
- swift中协议试编程?
- swift元组
class和struct区别
class为引用类型,struct为值类型,struct不可以继承
引用类型:赋值享用同一内存地址,拷贝为浅拷贝
值类型:赋值时会重新创造一个新的内存地址,拷贝为深拷贝
swift扩展
swift中没有分类,通过扩展实现相同效果
Set独有的方法
取并集 a|b union
取交集 a&b intersection
取差集 a-b subtracting
取对称差集 a-b | b-a symmetricDifference
map,filter,reduce作用
map:映射 将一个列表转化为另一个列表
filter:筛选 筛选出想要的元素
reduce:把数组元素组合计算为一个值,并且会接受一个初始值,这个初始值的类型可以和数组元素类型不同
map和flatmap 的区别
flatmap会丢掉返回值为nil的元素
flatmap会降低数组维数
什么是 copy on write?
swift中值类型并不是开始赋值时就去赋值,而是在需要写入时才去复制
guard使用场景
guard与if类似,但是guard在解包(Optional)时更优雅,即解包的作用域更广
defer 使用场景
defer语句块中代码,会在当前作用域结束前调用。多个defer时,后加入的先执行
string和nsstring区别
string是值类型,nsstring是引用类型
什么时候使用 final
final用于限制继承和重写
dynamic 的作用
swift是一门静态语言,若想实现kvo这种效果,需在属性前加上dynamic
什么时候使用 @objc
swift和oc混编时,能够正常调用swift代码
swift相对于oc优点
简单易读,代码量少,更加清晰,易于维护
更加安全,optional的使用
泛型,结构体,枚举都很强大
函数式编程(map,faltmap,filture,reduce)
协议试编程
swift中的closure于OC中block的区别?
closure是匿名函数,block为结构体对象
closure修改外部变量的值不用加__block
逃逸闭包:一个传入函数的闭包如果在函数执行结束之后才会被调用,那么这个闭包就叫做逃逸闭包。
swift中协议试编程?
协议可以通过扩展,写方法的实现,类遵守当前协议,即可调用方法。
swift元组
(a,b) = (b,a) 可以实现值得交换