2015-10-02 2 views
21
class SomeClass { 
    var someProperty: Int { 
    throw Err("SNAFU") 
    } 
} 

上記のようなコードでは、囲み関数が 'throws'と宣言されていないため、迅速なバイナリのエラーは処理されません。スウィフト2で計算されたプロパティがスローされると宣言するにはどうすればよいですか?

「someProperty」が「throws」と宣言するにはどうすればよいですか?

class SomeClass { 
    var someProperty throws: Int { 
    } 
} 

class SomeClass { 
    var someProperty: throws Int { 
    } 
} 

class SomeClass { 
    var someProperty: Int throws { 
    } 
} 

動作するようには思えません。

答えて

25

スウィフト3のよう:

あなたが計算されたプロパティから投げることができません。スローする場合は関数を使用する必要があります。 The Swift Programming Languageの末尾のDeclarations section of the Language Reference部分は、関数とイニシャライザ宣言のキーワードとしてthrows(およびrethrows)のみをリストします。

+0

ありがとうございます。それはかなり説得力があります。私はこれが私が尋ねた元の問題ではないことを認識していますが、私のシナリオでは、コンテナの型があり、それぞれの要素がハッシュ可能な場合にのみ 'hashValue'を実装します。私はこれを回避するために何ができるのか知っていますか? – math4tots

+0

あなたのコンテナを、 'Hashable'要素だけで動作するジェネリック型にすることは、' Dictionary'キーをHashableにしなければならないのと同じように妥当ですか?そうでなければ、 'Hashable''プロトコル'が 'nil'レスポンスを許さず、要素がハッシュ可能でない場合にハッシュ関数を思いつくために何らかの作業をしなければならないかもしれないと思います。 '投げる'。もし適切であれば 'fatalError()'を使うこともできます。 –

+0

それについて考えると、(型)システムとの戦いがあまりにも進んでいると思います。お手伝いありがとう! – math4tots

27

それはだがことはできません(まだ)スウィフトで計算されたプロパティからthrowは、私自身がone of Apple Developer Forums threads上のこの非常に同じ質問住所がChris Lattnerが見つかりました:

私たちは、あなたがゲッターをマークすることができるはずということに同意を下付き文字と計算されたプロパティで「スロー」として設定されていますが、まだ得られていません。私たちはこれをしばらくサポートしていますが、Swift 2に間に合うかどうかは不明です。

+0

クリスさんのコメントをお待ちしています。 – BonanzaDriver

+9

スワイフ3ではこれは変更されていないことに注意してください。 – mcfedr

+4

これはSwift 4では変更されていません。 –

関連する問題