2016-09-24 3 views
7

メインスレッドでビデオを非同期で撮影/記録しようとしています。しかし、私はdispatch.main.asyncを呼び出すとき、私は常にエラーを取得:swift 3のディスパッチキューが未解決の識別子として表示されます

use of unresolved identifier DispatchQueue 

を私はWWDCから、Appleのドキュメントにどこにでも見てきましたが、私は廃止されているタイプの証拠を見ません。ここで

は、コードは次のとおりです。

if !self.cameraEngine.isRecording { 
      if let url = CameraEngineFileManager.temporaryPath("video.mp4") { 
       self.cameraButton.setTitle("stop recording", forState: []) 
       self.cameraEngine.startRecordingVideo(url, blockCompletion: { (url: NSURL?, error: NSError?) -> (Void) in 
        if let url = url { 

         DispatchQueue.main.async { 
          self.cameraButton.setTitle("start recording", for: .normal) 
          CameraEngineFileManager.saveVideo(url, blockCompletion: { (success: Bool, error: Error?) -> (Void) in 
           if success { 
            let alertController = UIAlertController(title: "Success, video saved !", message: nil, preferredStyle: .alert) 
            alertController.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil)) 
            self.present(alertController, animated: true, completion: nil) 
           } 
          }) 
         } 
        } 
       }) 
      } 
     } 
     else { 
      self.cameraEngine.stopRecordingVideo() 
     } 
    } 

答えて

0

私はあなたがあなたのフレームワークリストにこれらのいずれかを持っていないということだと思います。 これらのいずれかをインポートして、ファイルにDispatchQueueを入れてみてください。

import Foundation 
import UIKit 
// Any System Framework 

あなたのファイルはスウィフトファイルでない場合に発生する可能性があり、またはあなたのファイルは、スウィフトのファイルですが、トップ上の任意のフレームワークを持っていません。

+1

私のプロジェクトに両方のSDKをインポートしましたが、問題は依然として続きます – NightHawk95

7

あなたはどんな問題なくDispatchQueueクラスの使用を開始するためにあなたのコードの先頭に

import Foundation 

または

import Dispatch 

を置くことができます。 3スウィフトないある

self.cameraButton.setTitle("stop recording", forState: []) 

+0

インポートディスパッチは私のために行いました。私はIBM Swift Sandboxでコードを実行していました...ありがとう! –

+2

'import dispatch'はUbuntuで動作します –

3

ここ景品は、このラインです。したがって、ファイルはSwift 2.3ファイルです。したがって、DispatchQueueのようなものはありません。

+0

OPはSwift 3に準拠するようにコードを書き直す方が良いでしょう。おそらくSwift 2.3を学ぶ必要はありません。なぜなら、これは大部分が時代遅れであり、おそらくそれを必要とするコードベースはあまりないからです。 – Gino

+0

そして実際、マットの答えはちょっと混乱している/誤解を招きます。スウィフト2.3のソリューションを提示しているからです。より良い、より耐久性のあるソリューションは、2.3のコードを3.xのコードに変換することです。従来のSwiftのバージョンをサポートすることには意味がありません。私がmattの答えを読んだとき、私は最初、このdispatch_async構文を学ぶ必要があると思っていました。実際、DispatchQueueはすでにより優れた新しい構文でした。 – Gino

関連する問題