メソッド名を別のメソッド名に置き換えることはできませんが、メソッドへの参照を保持するクロージャ変数を使用できます。あなたができる、
func someMethod(postData: NSData) {
//Declare a closure variable
let theMethod: (NSData, andCompletionHandler: Routes.CompletionHandler)->Void //<-Make this match to `varMethod` and `varMethodNew`.
if self.recievedString == "varMethod" {
theMethod = self.routes.varMethod
} else {
theMethod = self.routes.varMethodNew
}
//And call it
theMethod(postData, andCompletionHandler: { response, error in
if error == nil {
if response["status"] as! Int == 1 {
dispatch_async(dispatch_get_main_queue()) {
self.navigateToSubmissionViewController()
}
} else {
self.showAlert(response["msg"] as! String)
}
} else {
self.showAlert(error!.localizedDescription)
}
})
}
しかし、あなたの場合:あなたのようにあなたのSubmitViewController
に閉鎖変数を使用して、いくつかの方法を書くことができます
class Routes {
typealias CompletionHandler = ([String: AnyObject], NSError?)->Void
func varMethod(data: NSData, andCompletionHandler: CompletionHandler) {
//...
}
func varMethodNew(data: NSData, andCompletionHandler: CompletionHandler) {
//...
}
}
class SubmitViewController: UIViewController {
var routes: Routes = Routes()
var recievedString: String?
func showAlert(message: String) {/*...*/}
func navigateToSubmissionViewController() {/*...*/}
//...
}
:あなたはこのような2つのクラスを持っていると仮定し
完了ハンドラをクロージャ変数として定義します。
func someOtherMethod(postData: NSData) {
//Declare a closure variable
let completionHandler: Routes.CompletionHandler = { response, error in
if error == nil {
if response["status"] as! Int == 1 {
dispatch_async(dispatch_get_main_queue()) {
self.navigateToSubmissionViewController()
}
} else {
self.showAlert(response["msg"] as! String)
}
} else {
self.showAlert(error!.localizedDescription)
}
}
//And use it
if self.recievedString == "varMethod" {
self.routes.varMethod(postData, andCompletionHandler: completionHandler)
} else {
self.routes.varMethodNew(postData, andCompletionHandler: completionHandler)
}
}
私はあなたが1つのメソッドを置き換えることはできませんが、目標を達成するために、新しいメソッド(varMethodNewなど)を1つ作成し、要件に基づいていくつかの条件に基づいて必要なメソッドを呼び出すことができます。 – Janmenjaya