私はかなり簡単な質問がありますが、C++スレッドでも同様の答えしか見つけられませんでした。コンパイラは、getUserFromServer
関数が例外をキャッチできるとしても、return
値が必要であることを示す関数に不満を表明しています。戻り値を求めているのは明らかですが、状況を適切に処理する方法がわかりません。スローする関数の戻り値
1つの方法は、ダミーuser
のようなものを作成して返しますが、それは良いとは言えません。もう1つの方法は、返品タイプOptional
を作成することですが、それはちょうど良い考えではない別のレベルにnil-checkの責任を移すだけです。どんな助けでも助けになります。
実際のコードで想定される動作をシミュレートするための設定です。
enum TestError: Error {
case JustError
}
class User {}
class ServerClient {
func getUser(really: Bool) throws -> User {
var uza: User?
if really {
uza = User()
}
guard let user = uza else {
throw TestError.JustError
}
return user
}
}
func getUserFromServer() -> User {
let client = ServerClient()
let user: User
do {
user = try client.getUser(really: true)
return user
} catch TestError.JustError {
print("just an error occured")
} catch {
print("something terrible happened")
}
} //Error: missing return in a function
ありがとう、これは私が必要としていたものです。 – inokey