當(dāng)方法當(dāng)作變量或者參數(shù)后就意味著我們可以在一個方法中定義新的方法,這給代碼結(jié)構(gòu)層次和訪問級別的控制帶來了新的選擇。
如下例的一個方法請求中調(diào)用了很多其他的函數(shù),可是其他的函數(shù)在項目中可能就只有這個方法會調(diào)用到:
func appendQuery(var url: String,
key: String,
value: AnyObject) -> String {
if let dictionary = value as? [String: AnyObject] {
return appendQueryDictionary(url, key, dictionary)
} else if let array = value as? [AnyObject] {
return appendQueryArray(url, key, array)
} else {
return appendQuerySingle(url, key, value)
}
}
func appendQueryDictionary(var url: String,
key: String,
value: [String: 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
}
可以考慮改成這樣的形式
func appendQuery(var url: String,
key: String,
value: AnyObject) -> String {
func appendQueryDictionary(var url: String,
key: String,
value: [String: 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 let array = value as? [AnyObject] {
return appendQueryArray(url, key, array)
} else {
return appendQuerySingle(url, key, value)
}
}