大佬教程收集整理的这篇文章主要介绍了ios – 如何在Swift中正确使用类扩展?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
最近,我已经看到Apple建议更大程度地使用扩展,例如将协议实现为单独的扩展.
也就是说,如果你有一个实现协议B的A类,你最终会得到这样的设计:
class A { // Initializers,stored properties etc. } extension A: B { // Protocol implementation }
当你进入那个兔子洞时,我开始看到更多基于扩展的代码,例如:
fileprivate extension A { // Private,calculated properties } fileprivate extension A { // Private functions }
我的一部分就像你在单独的扩展中实现协议时获得的构建块.它使得该类的独立部分非常独特.但是,只要继承此类,就必须更改此设计,因为无法覆盖扩展函数.
我认为第二种方法是……有趣.一旦它成功,那就是你不需要注释每个私有属性并将其作为私有属性,因为你可以为扩展指定.
但是,这种设计还会分割存储和非存储的属性,公共和私有函数,使类的“逻辑”更难遵循(我写的是写较小的类).这与子类化问题一起使我在延伸仙境的门廊上停了下来.
很想听听Swift社区如何看待扩展.你怎么看?有银弹吗?
我目前正在我的项目中使用扩展方法,原因如下:
>代码非常简洁:我的类永远不会超过150行,并且通过扩展分离使我的代码更具可读性并且由职责分隔
这通常是一个类的样子:
final class A { // Here the public and private stored properties } extension A { // Here the public methods and public non-stored properties } fileprivate extension A { // here my private methods }
扩展可以不止一个,当然,这取决于你的课程做什么.这对于组织代码并从Xcode顶部栏中读取它非常有用
>它提醒我Swift是一种面向协议的编程语言,而不是OOP语言.协议和协议扩展没有任何功能.我更喜欢使用协议为我的classes / struct添加安全层.例如,我通常以这种方式编写模型:
protocol User { var uid: String { get } var name: String { get } } final class UserModel: User { var uid: String var name: String init(uid: String,name: String) { self.uid = uid self.name = name } }
通过这种方式,您仍然可以在UserModel类中编辑您的uid和名称值,但您不能在外部编辑,因为您只能处理User协议类型.
以上是大佬教程为你收集整理的ios – 如何在Swift中正确使用类扩展?全部内容,希望文章能够帮你解决ios – 如何在Swift中正确使用类扩展?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。