最近,我已经看到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社区如何看待扩展.你怎么看?有银d吗?
解决方法 当然,这只是我的意见,所以我要写的很容易.我目前正在我的项目中使用扩展方法,原因如下:
>代码非常简洁:我的类永远不会超过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中正确使用类扩展?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)