2016-06-29 18 views
-2

XCodeのドキュメント(alt-click)によると、removeItemAtPathはtrueまたはfalseを返します。ただし、以下のコードでは、次のエラーが表示されます。ファイルの削除が成功したかどうかの確認

'()'型の値を指定した型 'Bool'に変換できません。

let result: Bool = try NSFileManager.defaultManager().removeItemAtPath(<my file path here>) 

マニュアルは間違っていますか?ファイルの削除が成功したかどうかを確認するにはどうすればよいですか? removeItemAtPathでエラーがスローされた場合、次のコードの実行はスキップされますか?

例:エラーがスローされた場合

try NSFileManager.defaultManager().removeItemAtPath(<my file path here>) 
doOtherStuff() 

ウィルdoOtherStuffが呼ばれますか?

+1

do/try/catchパターンに関するドキュメントを参照してください。 – user3441734

+1

Swiftでは、Objective-Cで使用されるBOOL戻り値がDo/Try/Catchブロックに置き換えられました。したがってSwiftの 'removeItemAtPath'はスローされますが、Objective-Cの' removeItemAtPath'は成功するとBOOL –

+0

を返します。失敗した場合は何も実行されませんが、キャッチの下にあるものはすべて失敗したときに実行されます – MichaelQ

答えて

1

Will doOtherStuff be called if an error was thrown?

tryの全体のポイントは、それが失敗した場合、それは現在のスコープからすぐに終了していることです。つまり、なぜあなたは結果やNSErrorポインタをキャプチャしてテストする必要はありません(そうすることはできません)。

0

コメントごとに、Do/Try/Catchブロックを使用します。

do { 
     try NSFileManager.defaultManager().removeItemAtPath("<my file path here>") 
    } catch { 
     print ("The file could not be removed") 
    } 

ファイルが削除されると、tryブロック内のコードが実行されます。ファイルが削除されない場合、catchブロック内のコードが実行されます。

たとえば、tryブロックにprint( "Success")を指定すると、ファイルが正常に削除された場合、そのprint文が実行されます。

同様に、catchブロックでは、ファイルが削除されない場合、実行するコードを置くことができます。私は簡単なprint文を書いていますが、あなたが望むものを置くことができます。ここ

0

iはのtry/catchを使う方法である:

func deleteFileFromDocumentsDirectory(fileName : String) ->() { 

    // Optional 1: split file by dot "." 
    let fullName = fileName.componentsSeparatedByString(".") 
    let fileName = fullName[0]; 
    let fileExtension = fullName[1]; 

    let documentsFolder : String = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.UserDomainMask, true)[0] 
    let fileManager = NSFileManager.defaultManager() 
    let destinationPath = documentsFolder + "/" + fileName + "." + fileExtension 
    // Optional 2: check, if file exits 
    let fileExists = fileManager.fileExistsAtPath(destinationPath) 

    if fileExists { 
     do { 
      try fileManager.removeItemAtPath(destinationPath) 
     } catch let error as NSError { 
      print("Could not delete \(error), \(error.userInfo)") 
     } 
    } 
} 
+0

あなたは 'let error:NSErrorPointer = nil; 'を削除する必要があります。それは役に立たず、catchブロックは' error'定数自体を生成します。 – Moritz

+0

@エリックは確かです、あなたは正しいです。私はそれを削除した。 Uはすべてを見ます;-) –

関連する問題