iOS面试 swift篇

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) 可以实现值得交换

你可能感兴趣的:(iOS面试 swift篇)