IOS面试题——Swift协议与面向协议编程,协议实现前缀(13)
一 面试题汇总
- 什么是协议?协议能添加什么?
- 协议中定义的内容是否必须全部都实现?如果想要实现可选协议呢?
- 实现协议时的属性权限要不小于协议中定义的属性权限
- 协议中定义的
init
方法,能否用init?
来实现? - 枚举值如何进行遍历?遵守CaseIterable协议
- 自定义打印需要遵循什么协议?CustomStringConvertible、 CustomDebugStringConvertible
- Any、AnyObject有什么区别?如何定义只能类遵守的协议?
- 什么是面向协议编程?解决了面向对象编程哪些问题?
- 如何利用协议实现前缀效果?
二 面试题解答(仅供参考)
2.1 什么是协议?协议能添加什么?
1 | 在 Swift 中,协议(Protocol)定义了一组方法、属性或其他要求,供遵循该协议的类型(类、结构体、枚举)来实现。 |
2.2 协议中定义的内容是否必须全部都实现?如果想要实现可选协议呢?
1 | 普通协议:所有要求必须实现。 |
2.3 实现协议时的属性权限要不小于协议中定义的属性权限
1 | 访问级别:实现时不能低于协议定义的权限。 |
2.4 协议中定义的init
方法,能否用init?
来实现?
1 | 普通 init → 可以用 init 或 init? 来实现(降级)。 |
2.5 枚举值如何进行遍历?遵守CaseIterable协议
1 | 遵守 CaseIterable,用 allCases 来遍历所有枚举值! |
2.6 自定义打印需要遵循什么协议?CustomStringConvertible、 CustomDebugStringConvertible
1 | CustomStringConvertible:用于普通打印(print())。 |
2.7 Any、AnyObject有什么区别?如何定义只能类遵守的协议?
1 | Any:表示任意类型(包括值类型和引用类型)。 |
2.8 什么是面向协议编程?解决了面向对象编程哪些问题?
1 | 面向协议编程(POP)强调通过协议来定义行为,解耦类型和功能。 |
2.9 如何利用协议实现前缀效果?
1 | 在 Swift 中,可以利用协议来实现前缀效果,即让不同的类型通过遵循协议来共享相同的行为或功能。 |
三 参考
- 简书—Swift协议与面向协议编程,协议实现前缀