2017-01-31 12 views
0

私はデータセットを管理するシングルトンを持っています。何らかの理由でデータが利用できない場合は、例外をスローすることでシングルトンの作成を失敗させたいと思います。コンパイラはゲッターをthrowsとマークするファンではありません注:私はこの他の方法を処理することができたが、今でも可能であれば私は好奇心が強いです。シングルトンイニシャライザから例外をスローする

+1

私はあなたのタスクは 'Failable Initializers' https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.htmlのための完璧だと思う – NSDmitry

+0

Iこれが1つの方法であることに同意しますが、この特定のケースでは、アプリケーションのより高いレベルで障害を処理できるように、例外をバブルアップする方がはるかに良いでしょう。 'Foo.default'を呼び出すたびに' if let'を使う必要もありません。 – RobertJoseph

+0

'default'を関数にすることができますし、それによって' throw'エラーが発生する可能性はありますか? – NSDmitry

答えて

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

関連する問題