Swift方法嵌套
2016-04-20 00:56
330 查看
想想看,有多少次我们因为一个方法主体内容过长,而不得不将它重够为好几个小的功能模块方法,然后在原来的主体方法中去调用这些小方法?
在Swift中,对于这种情况有了解很好的应对措施,我们可以在方法中定义其他方法,也就是说,让方法嵌套起来。
例如:
func appendQuery(var url:String, key:String, value:AnyObject) -> String {
if let dictionary = value as? [String:AnyObject] {
return appendQueryDictionary(url, key, dictionary)
} else if iet array = value as? [AnyObject] {
return appendQueryArray(url, key, array)
} else {
return appendQuerySingle(url, key, value)
}
}
func appendQueryDictionary(var url:String, key:String, value:AnyObject) -> String {
//...
return result
}
func appendQueryArray(var url:String, key:String, value:AnyObject) -> String {
//...
return result
}
func appendQuerySingle(var url:String, key:String, value:AnyObject) -> String {
//...
return result
}
事实上后三个方法都只会在第一个方法中被调用,它们其实和Request没有直接关系,所以将它们放到appendQuery中去会是一个更好的组织形式:
func appendQuery(var url:String, key:String, value:AnyObject) -> String {
func appendQueryDictionary(var url:String, key:String, value:AnyObject) -> String {
//...
return result
}
func appendQueryArray(var url:String, key:String, value:AnyObject) -> String {
//...
return result
}
func appendQuerySingle(var url:String, key:String, value:AnyObject) -> String {
//...
return result
}
if let dictionary = value as? [String:AnyObject] {
return appendQueryDictionary(url, key, dictionary)
} else if iet array = value as? [AnyObject] {
return appendQueryArray(url, key, array)
} else {
return appendQuerySingle(url, key, value)
}
}
虽然Swift提供了public、internal和private三种访问权限,但是有些方法我们完全不希望在其他地方呗直接使用。最常见的例子就是在方法模板中,我们一方面希望提供一个模板来让使用者可以灵活地通过模板定制他们想要的方法,但另一方面又不希望暴露太多细节,或者让使用者可以直接调用到模板。
一个最简单的例子:
func makeIncrementor(addNumber:Int) -> ((inout Int) -> ()) {
func incrementor(inout variable:int) -> () {
variable += addNumber;
}
return incrementor
}
在Swift中,对于这种情况有了解很好的应对措施,我们可以在方法中定义其他方法,也就是说,让方法嵌套起来。
例如:
func appendQuery(var url:String, key:String, value:AnyObject) -> String {
if let dictionary = value as? [String:AnyObject] {
return appendQueryDictionary(url, key, dictionary)
} else if iet array = value as? [AnyObject] {
return appendQueryArray(url, key, array)
} else {
return appendQuerySingle(url, key, value)
}
}
func appendQueryDictionary(var url:String, key:String, value:AnyObject) -> String {
//...
return result
}
func appendQueryArray(var url:String, key:String, value:AnyObject) -> String {
//...
return result
}
func appendQuerySingle(var url:String, key:String, value:AnyObject) -> String {
//...
return result
}
事实上后三个方法都只会在第一个方法中被调用,它们其实和Request没有直接关系,所以将它们放到appendQuery中去会是一个更好的组织形式:
func appendQuery(var url:String, key:String, value:AnyObject) -> String {
func appendQueryDictionary(var url:String, key:String, value:AnyObject) -> String {
//...
return result
}
func appendQueryArray(var url:String, key:String, value:AnyObject) -> String {
//...
return result
}
func appendQuerySingle(var url:String, key:String, value:AnyObject) -> String {
//...
return result
}
if let dictionary = value as? [String:AnyObject] {
return appendQueryDictionary(url, key, dictionary)
} else if iet array = value as? [AnyObject] {
return appendQueryArray(url, key, array)
} else {
return appendQuerySingle(url, key, value)
}
}
虽然Swift提供了public、internal和private三种访问权限,但是有些方法我们完全不希望在其他地方呗直接使用。最常见的例子就是在方法模板中,我们一方面希望提供一个模板来让使用者可以灵活地通过模板定制他们想要的方法,但另一方面又不希望暴露太多细节,或者让使用者可以直接调用到模板。
一个最简单的例子:
func makeIncrementor(addNumber:Int) -> ((inout Int) -> ()) {
func incrementor(inout variable:int) -> () {
variable += addNumber;
}
return incrementor
}
相关文章推荐
- block,代理和通知的简单介绍--swift闭包
- Swift下标
- Swift中文教程(七) 闭包
- Swift中文教程(六)函数
- Swift中文教程(五)控制流
- Swift中文教程(四) 集合类型
- swift第三方库导入
- swift快捷键大全
- swift开发笔记24 解决键盘遮挡输入框 的方法
- swift URL生成
- swift实现ios类似微信输入框跟随键盘弹出的效果
- Swift 闭包页面传值
- iOS开发Swift篇(02) NSThread线程相关简单说明
- Swift 学习指南
- IOS开发Swift使用NSURLSessionUploadTask实现后台上传功能
- openstack swift页面安装
- iOS开发Swift UITableView和UICollectionView的使用
- Swift笔记:继承
- swift笔记2
- swift输入验证码提示框