2016-09-29 100 views
-1

我正在接收do {行預期的聲明錯誤。我已經嘗試過研究這個,並且在try/catch語句中閱讀了關於Swift 3的Apple開發人員信息,但一直未能弄清楚這一點。預期聲明錯誤在do {行使用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的方法中。

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的東西,你也必須try做一些事情,可能會失敗。之後,您將關閉do,並在您的錯誤中添加一些catch聲明。像switch聲明一樣,您的catch個案必須詳盡無遺。在嘗試編譯時,如果沒有最終的catch,則可能會有錯誤消除其餘可能的錯誤,因爲潛在的錯誤超出了您的枚舉的範圍。

您可能還想錯誤檢查分子和分母以確定它們存在。爲了鍛鍊,我只是強行解開他們。

+0

謝謝,現在更有意義。我是編程新手,我很欣賞這些建議。 –

+0

如果我的回答滿足問題,請將問題標記爲已回答! – schrismartin