私はiPhoneの開発に着手しました。多くの方々のおかげで、簡単なアプリケーションが動作しました。私は以下のコードを使ってmysqlデータベースからデータを取得していました。このコードはcommonfun.swiftファイルにあり、ここではすべての機能を保持しており、必要なときにはさまざまな迅速なファイルから呼び出します。通信リンクにより、30秒間試行されます。Swift Xcode NSURLConnection.sendSynchronousRequestは非推奨です
すべてが素晴らしいです。これは、関数の "終わり"にある配列にデータをロードし、呼び出すswiftファイルに "戻る"ために同期されます。
のサンプルコードは、次のとおりです。
import UIKit
class commonfunc
{
var result1: [String] = [];
func DB_To_Array_Swift(whattoget: String, inout jsondata: NSDictionary)
... set up stuff
... call php to get data
while while_exit == "NO"
{
number_of_retries = number_of_retries + 1
if number_of_retries > 30
{
break
}
do
{
urlData = try NSURLConnection.sendSynchronousRequest(request, returningResponse:&response)
while_exit = "YES"
}
catch let error as NSError
{
tmperror = error
while_exit = "NO"
sleep(1)
}
}
... load data into an array and return to calling swift file.
は素晴らしい作品!異なる基準でさまざまな迅速なファイルから呼び出されます。
今、NSURLConnection.sendSynchronousRequestは償却されています。
NSURLSession.sharedSession()で置き換えようとしましたが、非同期で実行され、メインのswiftファイルに戻ります。
私は以下でそれを置き換えようとしました。しかし.....
while while_exit == "NO"
{
number_of_retries = number_of_retries + 1
if number_of_retries > 30
{
while_exit == "YES"
break
}
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request)
{
(
let urldata, let response, let error) in
if error != nil
{
tmperror = error!
while_exit = "NO"
sleep(1)
}
let dataString = NSString(data: urldata!, encoding: NSUTF8StringEncoding)
print(dataString)
while_exit = "YES"
}
print("\n here5")
task.resume()
print("\n here6")
}
while while_exit == "NO"
{
sleep(1)
}
私はそれがcommonfunc.swiftで同期を見えるようにするが道
おかげ
は 'sleep'は、同期ネットワークは、非常に非常に悪いです }) task.resume() dispatch_semaphore_wait(セマフォ、DISPATCH_TIME_FOREVER) 戻りデータ;、エラー=エラー{印刷(エラー)} dispatch_semaphore_signal(セマフォ)を聞かせ悪い。非同期パターンを使用する方法は常にあります。あなたのケースでは 'NSURLSession'と' NSURLSessionDataTask'を使い、デリゲートメソッドを実装してください。 'didCompleteWithError'では、タイマーを起動してエラー時にタスクを再実行するか、受信したデータから文字列を作成し、配列にデータをロードしてswiftファイル*に戻ります。 – vadian