-1

このようなクラスで非同期リクエストがあり、

class Req{
    func processRequest(){
        NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
             //Do some operation here
        })
    }
}

そして、私はこのように1つのView Controllerからこのメソッドを呼び出しています.

class classOne{
    func classOneFun(){
        Req().processRequest()
        self.demoFun()
    }

    func demoFun(){
        //Do some operation here
    }
}

そして、このように別のView Controllerから同じ関数を呼び出していますが、

class classTwo{

    func classTwoFun(){
        Req().processRequest()
        self.sampleFun()
    }

    func sampleFun(){
        //Do some operation here
    }
}

demoFun()ここで、 orが完了したsampleFun()後にのみ呼び出したいと思います。とが同じクラスにあるprocessRequest()場合、processRequest() の完了ハンドラーで関数を呼び出すことができます。しかし、私の場合、processRequest() 関数を呼び出すビュー コントローラーが 20 個近くあるため、それはできません。SynchronusRequest は Swift 2.0 で廃止されたため、使用できません。では、非同期リクエストが完了したら、どうすれば他の関数を呼び出すことができるでしょうか?demoFun() or sampleFun()processRequest()

4

2 に答える 2

1

ブロックを作成する

class Req{
    func processRequest(success: () -> ()){
        NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
            //Do some operation here
            success()
        })
    }
}


class classOne{
    func classOneFun(){
        Req().processRequest { () -> () in
            self.demoFun()
        }
    }

    func demoFun(){
        //Do some operation here
    }
}
于 2016-03-02T14:11:01.753 に答える
0

クロージャーを受け取るには、processRequest 関数を変更する必要があります。例えば:

class Req{

        func processRequest(callback: Void ->Void){
            NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
                 //Do some operation here
                 //Call the callback here:
                 callback()
            })
        }
    }

これで、processRequest API を呼び出したい場所に、非同期コールバック処理の直後に実行したいコードを追加できます。例えば:

class classOne{
    func classOneFun(){
        Req().processRequest(){   //Passing the closure as a trailing closure with the code that we want to execute after asynchronous processing in processRequest
         self.demoFun()

}
    }

    func demoFun(){
        //Do some operation here
    }
}

HTH。

于 2016-03-02T14:00:35.950 に答える