2017-01-03 10 views

答えて

1

私は確信していましたが、これは...私は寝る必要があります。

struct Struct { 
    let i: Int 

    init?(i: Int?) { 
     if let i = i { self.i = i } 
     else { return nil } 
    } 
} 
3

私が言っているだろう:

struct Struct { 
    let i: Int 

    init?(i: Int?) { 
     if i == nil {return nil} 
     self.i = i! 
    } 
} 

私はそれが早期に終了するには、あなたの最初の欲求をキャプチャし、あなたがいない中間変数を、避けるためにしようとしていたif/elseを避けると思います。 iをアンラップするには、単にアンラップしてください! if letまたはguard letのいずれか、またはその派手なものの必要はありません。

(一方、私が聞いている?:初期化子にnilを渡すと失敗とみなされた場合、なぜ最初の場所でオプションを受け入れるために提供)

+0

実際のアプリケーションがそれよりも複雑です、実際にはオプションのローカル変数で、最終的にはアンラップする必要があります。そのオプション性は、イニシャライザにのみ隔離されています – Alexander

+0

私はそのように思っていました。 :) – matt

+0

実際には、私がここにいる間に、自分のデザインが完全にゴミではないことを確認することもあります。私は、[RIFFファイル](http://www.johnloomis.org/cpe102/asgn/asgn1/riff.html)からデータの「チャンク(chunk)」を解析しようとしています(コンテナ形式で、 wav'、 'ani'の使い方)。有効なファイルには、特定のチャンクセットが必要ですが、任意の順序で指定できます。したがって、これらの変数は作成中はオプションですが、最終的にチェックされ、新しくinitされた構造体の非オプションのプロパティに割り当てられます。 – Alexander

関連する問題