私はデータセットを管理するシングルトンを持っています。何らかの理由でデータが利用できない場合は、例外をスローすることでシングルトンの作成を失敗させたいと思います。コンパイラはゲッターをthrows
とマークするファンではありません注:私はこの他の方法を処理することができたが、今でも可能であれば私は好奇心が強いです。シングルトンイニシャライザから例外をスローする
0
A
答えて
1
これは私の運動場のコードのように、あなたのシングルトンのすべての呼び出しをtryで実行する必要があります。
enum FooError : Error {
case RuntimeError(String)
}
class Foo {
static func defaultFoo() throws -> Foo {
if let instance = Foo("Success") {
return instance
} else {
throw FooError.RuntimeError("Singleton is not created")
}
}
private init?(_ parameter: String?) {
if let _ = parameter {
print("Init Succeded")
} else {
print("Init failed")
return nil;
}
}
}
try Foo.defaultFoo()
+0
Sryは "answer"を使用して適切な書式を設定する必要があります。それ以外の場合はコードを読み取ることができませんでした。 – NSDmitry
+0
ありがとう@NSDmitry。あなたが物件ゲッターから投げることができないので、私はこれが私が得ることができる最も近いものだと思います。 – RobertJoseph
関連する問題
- 1. 例外から例外をスローする
- 2. カスタムクラスライブラリから例外をスローする
- 3. Process.Exitedハンドラから例外をスローする
- 4. WebGLから例外をスローする
- 5. =例外をスローする例外
- 6. openFileOutput例外をスローする
- 7. OutOfMemoryError例外をスローする
- 8. RESTHEART例外をスローする
- 9. UseHangfireServer例外をスローする
- 10. コンテンツプロバイダ例外をスローする
- 11. バブルソート例外をスローする
- 12. Mockito例外をスローする
- 13. カスタム例外をスローする
- 14. 例外をスローする
- 15. parseObject.saveInBackground()スロー例外
- 16. スロー例外
- 17. eglGetDisplay()スロー例外
- 18. アンドロイドネイティブコードからC++例外をスローするとスレッドがハングする
- 19. Linux上のJerseyからJsonを返す例外をスローする
- 20. DLL境界を越えてコンストラクタから例外をスローする
- 21. PowerMock @RunWith(PowerMockRunner.class)から例外をスローする注釈
- 22. フォームテンプレートからのフィールド「トラッキング」が例外をスローする
- 23. HRESULTから例外をスローするPool.Recycle():0x80070005(E_ACCESSDENIED)
- 24. .NETのコンストラクタから例外をスローする
- 25. JunitテストからSpringブートアプリケーションが例外をスローする場合
- 26. コントローラーで実行されたコマンドから例外をスローする
- 27. Guava EventBusサブスクライバから例外をスローする
- 28. RealProxyのサービス契約からWCFフォールト例外をスローする
- 29. C++でコンストラクタから例外をスローする
- 30. Androidのスロー例外
私はあなたのタスクは 'Failable Initializers' https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.htmlのための完璧だと思う – NSDmitry
Iこれが1つの方法であることに同意しますが、この特定のケースでは、アプリケーションのより高いレベルで障害を処理できるように、例外をバブルアップする方がはるかに良いでしょう。 'Foo.default'を呼び出すたびに' if let'を使う必要もありません。 – RobertJoseph
'default'を関数にすることができますし、それによって' throw'エラーが発生する可能性はありますか? – NSDmitry