2017-06-21 23 views
-3

我設置的結構內部的不斷calculationError PendingBinaryOperation 我創建類型PendingBinaryOperation 的變量pendingBinaryOperation我得到錯誤的情況下聲明calculationError是一個懸而未決標識符。代碼部分如下。我得到一個懸而未決的標識符,即使我有一個讓該變量

mutating func performOperation(_ symbol:String){ 
    if let currentOperation = operations[symbol] { 
     switch currentOperation { 
     case .nullOperation(let function, let nullDiscription): 
      accumulator = (function(), nullDiscription, nil) 
     case .constant(let value): 
      accumulator = (value,symbol, nil) 
     case .unaryOperation(let function, let unaryDescription, let unaryMemory): 
      if accumulator != nil { 
       accumulator = (function(accumulator!.digit), unaryDescription(accumulator!.description), 
       unaryMemory(accumulator!.digit)) 
      } 
     case .binaryOperation(let binaryFunction, 
           let binaryDescription, 
           let binaryError): 
      if accumulator != nil { 
       doAPendingBinaryOperation() 
       resultIsPending = true 
       pendingBinaryOperation = PendingBinaryOperation(
        mathFunction: binaryFunction, 
        calculationDescription:binaryDescription, 
        firstOperand: accumulator!.digit, 
        descriptionOperand:(accumulator?.description)!, 
THIS LINE GIVES THE ERROR ->binaryError: calculationError) 
       accumulator = nil 
      } 
     case .equals: 
      doAPendingBinaryOperation() 
      resultIsPending = false 
     } 
    } 
} 

private var pendingBinaryOperation:PendingBinaryOperation? 

struct PendingBinaryOperation { 
    let calculationError: (Double, Double) -> String 
    let mathFunction: (Double, Double) -> Double 
    let calculationDescription: (String, String) -> String 
    let firstOperand: (Double) 
    let descriptionOperand:(String) 
    func perform(with secondOperand:(Double)) -> Double { 
     return (mathFunction(firstOperand, secondOperand)) 
    } 
    func performDecription(with secondOperan:(String)) -> String { 
     return (calculationDescription(descriptionOperand, secondOperan)) 
    } 
} 
+1

我複製/粘貼代碼到操場,幾乎每行被標記爲錯誤。你能發佈只會產生你遇到問題的錯誤的代碼嗎? –

回答

0

根據您展示的代碼,PendingBinaryOperation構造是:

PendingBinaryOperation(calculationError: (Double, Double) -> String, mathFunction: (Double, Double) -> Double, calculationDescription: (String, String) -> String, firstOperand: (Double), descriptionOperand: (String)) 

,但你在呼喚:

PendingBinaryOperation(mathFunction: (Double, Double) -> Double, calculationDescription: (String, String) -> String, firstOperand: (Double), descriptionOperand:(String), binaryError: ??) 

正如你所看到的,你的參數的順序都是錯的,並且您有一個名爲binaryError的參數,該參數不存在於該類型中。

我猜你需要將binaryError: calculationError改爲calculationError: binaryError並重新排列你的參數,以便它們是正確的。

0

的Structs斯威夫特自動生成一個按成員初始化,這就是你在這裏使用初始化PendingBinaryOperation什麼。這就要求所有屬性在初始化設置,包括binaryError

你試圖通過calculationErrorbinaryError參數的值 - 這是不可能的,因爲calculationError是在此範圍內不可用(和沒有價值)。

如果你不想設置binaryError,你就必須使用按成員初始化放棄。這通常意味着使添加的PendingBinaryOperation特性的初始值,並使用正常init(即PendingBinaryOperation())。

相關問題