46

Swift 2 コマンド ライン ツール (main.swift) には、次のものがあります。

import Foundation
print("yay")

var request = HTTPTask()
request.GET("http://www.stackoverflow.com", parameters: nil, completionHandler: {(response: HTTPResponse) in
    if let err = response.error {
        print("error: \(err.localizedDescription)")
        return //also notify app of failure as needed
    }
    if let data = response.responseObject as? NSData {
        let str = NSString(data: data, encoding: NSUTF8StringEncoding)
        print("response: \(str)") //prints the HTML of the page
    }
})

コンソールに「yay」と表示されてから終了します (プログラムは終了コード: 0 で終了しました)。一見、要求が完了するのを待つことはありません。これを防ぐにはどうすればよいですか?

コードはswiftHTTPを使用しています

NSRunLoopが必要かもしれないと思いますが、迅速な例はありません

4

7 に答える 7

41

RunLoop.main.run()ファイルの末尾に追加することも 1 つのオプションです。セマフォを使用した別のアプローチの詳細については、こちら

于 2015-08-11T14:23:51.437 に答える
5

「本番レベル」のコードではなく、簡単な実験やコードの試行が必要な場合は、次のように実行できます。

スイフト3

//put at the end of your main file
RunLoop.main.run(until: Date(timeIntervalSinceNow: 15))  //will run your app for 15 seconds only

詳細: https://stackoverflow.com/a/40870157/469614


アーキテクチャの固定実行時間に依存しないでください

于 2016-11-29T16:00:02.670 に答える
5

スウィフト 4:RunLoop.main.run()

ファイルの最後に

于 2018-12-16T00:58:48.723 に答える