Swift 的语言特性使得它非常适合被用于以函数式编程思想,如果你还没开始用函数式的方式来使用它,那么可以从现在开始,尝试着利用函数式的便利性。
let indicateView = UIImageView(frame: view.frame)
indicateView.image = UIImage(named: "how2use")
self.view.addSubview(indicateView)
我刚刚写了上面这段代码,来让我的当前页面显示名为 “how2use” 的这张图片。看起来好像是我做了三件事:
但是实际上,我只需要 frame、imageName 这两个东西就可以把这三行代码配置好,或者说我能不能用这两个参数来把上面的三行代码缩减为一行。
extension UIImageView {
func frameSelf (rect:CGRect) -> UIImageView {
self.frame = rect
return self
}
func imageSelf (imageName:String) -> UIImageView {
self.image = UIImage(named: imageName)
return self
}
func placeSelf (view:UIView) -> UIImageView {
view.addSubview(self)
return self
}
}
写了上面这些方法之后,代码修改成这个样子了:
let indicateView = UIImageView()
.frameSelf(view.frame)
.imageSelf("how2use")
.placeSelf(self.view)
为了代码可读性,这里我写了四行,但显然这是一行代码。 继而我发现 indicateView 这个名字没有存在的必要,于是我废弃掉 placeSelf 这个方法,改成这样:
self.view.addSubview(UIImageView()
.frameSelf(view.frame)
.imageSelf("how2use"))
一行代码,不引入多余的变量。 如果你愿意的话,这个模式还可以继续写下去。
extension UIImageView {
func tagSelf (tag:Int) -> UIImageView {
self.tag = tag
return self
}
func modeSelf(contentMode:UIViewContentMode) -> UIImageView {
self.contentMode = contentMode
return self
}
}
最后代码会变成这种形式:
NSObject().func1().func2().func3()......
userImage.blur().mosaic() // 马赛克本身是清晰的
userImage.mosaic().blur() // 马赛克本身是模糊的
推荐一下个人博客:kyxu.tech