Swift面试题2021(附答案)

1、Swift和Objective-C有什么区别?

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代码更简洁

2、讲讲Swift的派发机制

1)函数的派发机制:静态派发(直接派发)、函数表派发、消息派发
2)Swift派发机制总结:

  • Swift中所有ValueType(值类型:Struct、Enum)使用直接派发;
  • Swift中协议的Extensions使用直接派发,初始声明函数使用函数表派发;
  • Swift中Class中Extensions使用直接派发,初始声明函数使用函数表派发,dynamic修饰的函数使用消息派发;
  • Swift中NSObject的子类用@nonobjc或final修饰的函数使用直接派发,初始声明函数使用函数表派发,dynamic修饰的Extensions使用消息派发;

3)Swift中函数派发查看方式: 可将Swift代码转换为SIL(中间码)
swiftc -emit-silgen -O example.swift

3、Swift如何显示指定派发方式?
  • 添加final关键字的函数使用直接派发
  • 添加static关键字函数使用直接派发
  • 添加dynamic关键字函数使用消息派发
  • 添加@objc关键字的函数使用消息派发
  • 添加@inline关键字的函数会告诉编译器可以使用直接派发
4、Struct和Class的区别?

1)Struct不支持继承,Class支持继承
2)Struct是值类型,Class是引用类型
3)Struct使用let创建不可变,Class使用let创建可变
4)Struct无法修改自身属性值,函数需要添加mutating关键字
5)Struct不需要deinit方法,因为值类型不关系引用计数,Class需要deinit方法
6)Struct初始化方法是基于属性的

5、Swift中的常量和Objective-C中的常量有啥区别?

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修饰的属性非线程安全的。

更多好文推荐,欢迎关注 《iOS开发秘籍》 公众号,获取最新的内容

本文内容中部分来自网络,后续会持续更新完善。欢迎一起学习交流!

如需转载,请注明出处

Swift面试题2021(附答案)

  • 6
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值