import UIKit
protocol Operator {
var num: (Double, Double) {
get
set
}
func getResult() -> Double?
}
struct Addition: Operator {
var num = (0.0, 0.0)
func getResult() -> Double? {
return num.0 + num.1
}
}
struct Subtraction: Operator {
var num = (0.0, 0.0)
func getResult() -> Double? {
return num.0 - num.1
}
}
struct Multiplication: Operator {
var num = (0.0, 0.0)
func getResult() -> Double? {
return num.0 * num.1
}
}
struct Division: Operator {
var num = (0.0, 0.0)
func getResult() -> Double? {
var result: Double?
if num.1 != 0 {
return num.0 / num.1
}
return result
}
}
enum Operators {
case addition, subtraction, multiplication, divsion
}
struct OperatorFactory {
static func calculateForOperator(_ opt: Operators) -> Operator {
switch opt {
case .addition:
return Addition()
case .subtraction:
return Subtraction()
case .multiplication:
return Multiplication()
case .divsion:
return Division()
}
}
}
var testDivision = OperatorFactory.calculateForOperator(.divsion)
testDivision.num = (1, 3)
print(testDivision.getResult() ?? "Error")
var testAddition = OperatorFactory.calculateForOperator(.addition)
testAddition.num = (2, 3)
print(testAddition.getResult() ?? "Error")