『ゼロから学ぶSwift』学習ノート(Day 54)——間違いを投げ出す

1603 ワード

オリジナルの文章、転載を歓迎します.転載は明記してください:関東昇のブログ
tryの後ろに置くことができる呼び出し関数やメソッドには、エラーを投げ出す可能性があります.これらの関数やメソッドが宣言したパラメータの後ろにthrowsキーワードを付けて、この関数やメソッドがエラーを投げ出すことができることを示します.宣言放出エラーメソッドのサンプルコードは次のとおりです.
// Note 
func remove(model: Note) throws {
    ...
}
// 
func findAll() throws -> [Note] {
    ...
}

上記のコードremove(:)メソッドは値を返さず、throwsキーワードはパラメータの後ろに配置されます.findAll()には、パラメータと戻り値タイプの間に戻り値throwsキーワードが配置されます.
関数またはメソッドにエラーを投げ出す関数またはメソッドは、関数またはメソッドにエラーが発生し、投げ出されたため、投げ出されたエラーを宣言することができます.これにより、関数またはメソッドは投げ出されたエラーを宣言してこそ、実際の意味があります.エラーの発生と放出方法:関数またはメソッドにおいてthrow文により、人為的にエラーを放出する.関数やメソッドで呼び出された他のエラー関数やメソッドを投げ出すことができますが、キャプチャ処理がないとエラーが伝播します.サンプルコードは次のとおりです.
// Note 
func remove(model: Note) throws {       
    
    guard let date = model.date else {      // guard 
    // " " 
    throw DAOError.PrimaryKeyNull       
    }
    // 
    for (index, note) in listData.enumerate() where note.date == date {
    listData.removeAtIndex(index)
    }
}

// 
func findAll() throws -> [Note] {       
    
    guard listData.count > 0 else {         // guard 
    // " " 。
    throw DAOError.NoData           
    }
    return listData
}

func printNotes() throws {              // 
    
    let datas  = try findAll()          
    for note in datas {
    print("date : \(note.date!) - content: \(note.content!)")
    }
}
try printNotes()

guard文はfalseの場合にエラーを投げ出す条件で、このような早期判断を処理するのが最も得意です.findAll()文自体にエラーが発生する可能性がありますが、catch文を使用してキャプチャおよび処理されていません.これにより、このエラーが関数またはメソッドの呼び出し元に伝播し、呼び出し元が処理をキャプチャしない場合、最後にプログラムが実行中にエラーが発生します.