gpt4 book ai didi

ios - 如何根据swift中的条件替换方法名称?

转载 作者:行者123 更新时间:2023-11-30 13:06:20 24 4
gpt4 key购买 nike

有没有办法根据swift2.2中的条件将一个方法名称替换为另一个方法名称?

示例:

 if(self.RecivedString == "varMethod"){
self.routes.varMethod(postData, andCompletionHandler: { (response, error) in
if(error.length == 0){
if(response.valueForKey("status") as! NSInteger == 1){

self.performSelectorOnMainThread(#selector(SubmitViewController.navigateToSubmissionViewController), withObject: nil, waitUntilDone: true)
}else{
self.showalert(response.valueForKey("msg") as! String)
}


}else{
self.showalert(error as String)
}
})


}

在上面的示例中,我想根据条件将 self.routes.varMethod 名称替换为其他 self.routes.varMethodNew 名称。

最佳答案

您不能将一个方法名称替换为另一个方法名称,但您可以使用闭包变量来保存对方法的引用。

假设你有两个这样的类:

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() {/*...*/}
//...
}

您可以使用 SubmitViewController 中的闭包变量编写一些方法,如下所示:

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)
}
})
}
<小时/>

但在您的情况下,您可以将完成处理程序定义为闭包变量:

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)
}
}

关于ios - 如何根据swift中的条件替换方法名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39313129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com