前言
在阅读 Kingfisher 源码的时候,经常发现在类中出现嵌套 struct
、enum
、 func
等情况。但是我一直没有理解这么写的用意。今天来学习一下这种写法。
使用嵌套的原因
在日常开发过程中,为了控制每个方法的长度,我们经常把一个主体方法中的一些逻辑拆分出来,封装成一个个实现小功能点的方法,然后在主体方法中调用。然而这些子方法只会在这个主体中调用。传统写法示例如下:
func handleParam(_ param: [String: Any]) -> [String: Any] {
var result = param
addFirstParam(&result)
addSecondParam(&result)
addThirdParam(&result)
return result
}
func addFirstParam(_ param: inout [String: Any]) {
param["first"] = "Tony"
}
func addSecondParam(_ param: inout [String: Any]) {
param["second"] = ["pan", "book"]
}
func addThirdParam(_ param: inout [String: Any]) {
param["thrid"] = ["account":"No", "isMale":true]
}
这样写虽然没有什么问题,但是我们希望子方法只有一个地方可以调用,这样的写法让我们无法杜绝其他方法的访问。而方法嵌套就可以很好的解决这个问题,通过方法嵌套,我们可以实现在主体方法外无法访问子方法的目的,同时也达到了方法封装的要求。示例如下:
func handleParam(_ param: [String: Any]) -> [String: Any] {
func addFirstParam(_ param: inout [String: Any]) {
param["first"] = "Tony"
}
func addSecondParam(_ param: inout [String: Any]) {
param["second"] = ["pan", "book"]
}
func addThirdParam(_ param: inout [String: Any]) {
param["thrid"] = ["account":"No", "isMale":true]
}
var result = param
addFirstParam(&result)
addSecondParam(&result)
addThirdParam(&result)
return result
}
这样的操作方式让我们在代码层次结构和访问权限方面有更多的选择。而Swift中的嵌套不仅仅局限于方法,struct
enum
func
class
等都可以进行嵌套。
在开发的时候,嵌套的好处非常明显,例如嵌套 enum
就可以很明显的实现枚举隔离的目的。至于嵌套的更多内容只有在开发中慢慢发掘了。
最后
以上就是本篇的全部内容,势必会有一些遗漏和错误,欢迎斧正~
网友评论