1)Swift是强类型(静态)语言,有类型推断,Objective-C弱类型(动态)语言
2)Swift面向协议编程,Objective-C面向对象编程
3)Swift注重值类型,Objective-C注重引用类型
4)Swift支持泛型,Objective-C只支持轻量泛型(给集合添加泛型)
5)Swift支持静态派发(效率高)、动态派发(函数表派发、消息派发)方式,Objective-C支持动态派发(消息派发)方式
6)Swift支持函数式编程(高阶函数)
7)Swift的协议不仅可以被类实现,也可以被Struct和Enum实现
8)Swift有元组类型、支持运算符重载
9)Swift支持命名空间
10)Swift支持默认参数
11)Swift比Objective-C代码更简洁
1)函数的派发机制:静态派发(直接派发)、函数表派发、消息派发
2)Swift派发机制总结:
3)Swift中函数派发查看方式: 可将Swift代码转换为SIL(中间码)
swiftc -emit-silgen -O example.swift
1)Struct不支持继承,Class支持继承
2)Struct是值类型,Class是引用类型
3)Struct使用let创建不可变,Class使用let创建可变
4)Struct无法修改自身属性值,函数需要添加mutating关键字
5)Struct不需要deinit方法,因为值类型不关系引用计数,Class需要deinit方法
6)Struct初始化方法是基于属性的
Objective-C中的常量(const)是编译期决定的,Swift中的常量(let)是运行时确定的
6、?,??的区别 ?用来声明可选值,如果变量未初始化则自动初始化nil;在 *** 作可选值时,如果可选值时nil则不响应后续的 *** 作;使用as?进行向下转型 *** 作;?? 用来判断左侧可选值非空(not nil)时返回左侧值可选值,左侧可选值为空(nil)则返回右侧的值。 7、Swift中mutating的作用Swift中协议是可以被Struct和Enum实现的,mutating关键字是为了能在被修饰的函数中修改Struct或Enum的变量值,对Class完全透明。
8、Set(集合类型)的使用场景Set存储值类型相同、无序、去重
9、final关键词的用法final关键词的作用:它修饰的类、方法、变量是不能被继承或重写的,编译器会报错。另外,通过它可以显示的指定函数的派发机制。
10、lazy关键词的用法lazy关键词的作用:指定延时加载(懒加载),懒加载存储属性只会在首次使用时才会计算初始值属性。懒加载属性必须声明(var)为变量,因为常量属性(let)初始化之前会有值。
lazy修饰的属性非线程安全的。
完整优秀版请移步小专栏:
Swift面试题2021(附答案)
更多好文推荐,扫描下方的二维码,关注《iOS开发秘籍》,免费解锁完整版
本文内容中部分来自网络,后续会持续更新完善。欢迎一起学习交流!
如需转载,请注明出处
Swift面试题2021(附答案)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)