2016-10-01 7 views
0

に変数バインディングの後、私は(Xcodeの8.0で)スウィフト3.0から素敵なガード文を使用して、以下の機能を持っています:条件ガード迅速なコンパイル問題

func parse(suffix s: String) throws -> Instruction { 
    guard let count = Int(s) where count >= 0 else { 
     throw InstructionParsingError(message: s + " should be a positive integer") 
    } 
    return CallInstruction(argCount: count) 
} 

私の問題は、迅速なコンパイラが約二倍不平を言うことです私のガード文を含む行:

CallInstruction.swift:42:29: Boolean condition requires 'where' to separate it from variable binding 
CallInstruction.swift:42:30: Expected ',' joining parts of a multi-clause condition 

は私が

  • がを交換しようとしましたと,の場合、2番目のエラーは消えますが、最初のエラーはまだ残ります。
  • , where
  • whereを置き換えるが、このラインは偶数Int(s)によりここにcountを交換
  • を構文解析が、同じ誤差を有することができません。

コンパイルするにはどうすればよいですか? (ガードステートメントについては、もちろん、複数のガードを持つこともできますが、ifやswitchを使うこともできますが、ガードステートメントについて読んだところから、わかりやすい読み取り可能なラインを持つことができます)。

+1

'ガードは聞かせて、カウント= INT(s)は、カウント> = /おそらくXcodeの8いくつかの目に見えないスウィフト3でコンパイルする必要があります0 else'スペースや制御文字をソースコード内で使用しますか? –

+0

オハイオ州オクラホマ、私は交換後、すべてのエラーが消えた後、xcodeで私の製品をきれいにした。ありがとう! – jolivier

答えて

0

この問題を解決するには、where,に置き換えたモデルスウィフトシンタックスをガードステートメントで使用することをお勧めします。

func parse(suffix s: String) { 
    guard let count = Int(s), count >= 0 else { 
     return 
    } 
} 

また、if letステートメントを使用することが可能である:

func parseTwo(suffix s: String) { 
    if let count = Int(s), count >= 0 { 
     // done 
     print(count) 
    } else { 
     return 
    } 
}