2016-09-29 5 views
-1

do {lineで予期しない宣言エラーが発生しました。私はこれを研究し、Appleの開発者情報をSwift 3のtry/catchステートメントで読んだが、これを理解することはできなかった。ここでdo {lineでSwift 3を使用すると宣言エラーが発生する可能性があります。

はコードです:

class Calculator: ViewController { 

    var display = "0" 
    var numerator : Float? 
    var denominator : Float? 
    var total : Float? 


    enum divisionErrors: Error { 
     case inf 
     case nan 
    } 

    func divide(num: Float, by denum: Float) throws -> Float { 
     guard num != 0 else{throw divisionErrors.nan} 
     guard denum != 0 else{throw divisionErrors.inf} 

     let computedValue = num/denum 
     return computedValue 
    } 

    do { 

     catch divisionErrors.inf {print("Error")} 
     display = "0" 

     catch divisionErrors.nan {print("Error")} 
     display = "0" 
    } 
} 

答えて

0

あなたの主な問題は、あなたはそれが唯一の関数の本体である必要があり、一方、クラスのボディにdoステートメントを使用しようとしているということです。議論のために、私はこれをviewDidLoadメソッドに入れます。あなたがdo何か、あなたもtry失敗する可能性が何かをする必要がありますつまり

class Calculator: UIViewController { 

    var display = "0" 
    var numerator : Float? 
    var denominator : Float? 
    var total : Float? 


    enum divisionErrors: Error { 
     case inf 
     case nan 
    } 

    func divide(num: Float, by denum: Float) throws -> Float { 
     guard num != 0 else{throw divisionErrors.nan} 
     guard denum != 0 else{throw divisionErrors.inf} 

     let computedValue = num/denum 
     return computedValue 
    } 

    override func viewDidLoad() { 

     do { 
      try total = divide(num: numerator!, by: denominator!) 

     } catch divisionErrors.inf { 
      print("Error") 
      display = "0" 
     } catch divisionErrors.nan { 
      print("Error") 
      display = "0" 
     } catch { 
      assert(false, "Other Error") 
     } 
    } 
} 

、。その後、doをエラーの一部としてcatch文で閉じます。 switchのように、catchのケースは網羅的でなければなりません。潜在的なエラーがdivisionErrors列挙型の範囲を超越するので、最終的にcatchが残りの可能なエラーを切り捨てることなくコンパイルしようとすると、エラーが発生します。

numeratorとdenominatorがエラーであることを確認して、エラーが発生することもあります。私は運動のためにそれらをアンラップするだけです。

+0

ありがとうございます、今はもっと意味があります。私はプログラミングには新しく、アドバイスに感謝します。 –

+0

私の答えが質問を満たしていれば、その質問に答えてマークしてください! – schrismartin

関連する問題