Форум программистов, компьютерный форум CyberForum.ru

Swift

Войти
Регистрация
Восстановить пароль
 
IpHuman
13 / 13 / 1
Регистрация: 28.01.2015
Сообщений: 26
#1

Не могу переписать модель для калькулятора Swift 3.0.1 - Swift

13.12.2016, 19:34. Просмотров 576. Ответов 3
Метки нет (Все метки)

Есть данная рабочая модель калькулятораю:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import Foundation
 
 class CalculatorHead
{
    private var accumulator = 0.0
 
    func set0perand(operand: Double) {
        accumulator = operand
    }
    private var operations: Dictionary <String, Operation> = [
        "ПЂ" : Operation.Constant(M_PI), //символ пи
        "e" : Operation.Constant(M_E),
        "±" : Operation.UnaryOperation({ -$0}),
        "Sqrt" : Operation.UnaryOperation(sqrt),
        "cos" : Operation.UnaryOperation(cos),
        "*": Operation.BinaryOperation({ $0 * $1 }),
        "/": Operation.BinaryOperation({ $0 / $1 }),
        "+": Operation.BinaryOperation({ $0 + $1 }),
        "-": Operation.BinaryOperation({ $0 - $1 }),
        "=": Operation.Equals
    ]
    private enum Operation {
        case Constant(Double)
        case UnaryOperation((Double) -> Double)
        case BinaryOperation((Double, Double) -> Double)
        case Equals
    }
    
    func perform0peration(symbol: String) {
        if let operation = operations[symbol]{
            switch operation{
            case .Constant(let value):
                accumulator = value
            case .UnaryOperation(let function):
                accumulator = function(accumulator)
            case .BinaryOperation(let function):
                executePendingBinaryOperation()
                pending = PendingBinaryOperationInfo(binaryFunction: function, fistOperand: accumulator)
            case .Equals:
                executePendingBinaryOperation()
            }
        }
    }
    
    private func executePendingBinaryOperation()
    {
        if pending != nil {
            accumulator = pending!.binaryFunction(pending!.fistOperand, accumulator)
            pending = nil
        }
    }
    
    private var pending: PendingBinaryOperationInfo?
    
    
    private struct PendingBinaryOperationInfo{
        var binaryFunction: (Double, Double) -> Double
        var fistOperand: Double
    }
    
    var result: Double {
        get {
            return accumulator
        }
    }
}
Помогите переписать код что б он соответствовал такой структуре модели, котороя использует протокол і методы:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
enum BinaryOperation: String {
    case Plus = "+"
    case Minus = "-"
    case Mul = "*"
    case Div = "/"
}
 
enum UtilityOperation: String {
    case Dot = "."
    case Equal = "="
}
 
enum UnaryOperation: String {
    case Cos = "cos"
    case Sqrt = "Sqrt"
}
 
protocol CalcBrainInterface {
    func digit(value: Double)
    func binary(operation: BinaryOperation)
    func unary(operation: UnaryOperation)
    var result: ((Double?, Error?) -> ())? {get set}
    var result1: Double {get}
}
 
class CalculatorHead: CalcBrainInterface
{
 
    private var accumulator = 0.0
    var operandOne: Double?
    var operandTwo: Double?
    
    var value: Double?
    
    
    func digit(value: Double) {
        if operandOne == nil {
            operandOne = value
        } else if operandTwo == nil {
            operandTwo = value
        }
    }
    
    func binary(operation: BinaryOperation) {
        switch operation {
        case .Plus:
            
        case .Minus:
            
        case .Div:
            
        case .Mul:
            
            
        default:
            break
        }
        
    }
    
    func unary(operation: UnaryOperation) {
        switch operation {
        case .Cos:
        
        case .Sqrt:
        default:
            break
        }
        
    }
    
    func utility(operation: UtilityOperation) {
        switch operation {
        case .Dot:
        case .Equal:
            result?(value, nil)
        default:
            break
        }
        
    }
    
    var result: ((Double?, Error?)->())?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2016, 19:34     Не могу переписать модель для калькулятора Swift 3.0.1
Посмотрите здесь:
Swift Ошибка в коде ,не могу разобраться Swift 2
Swift, xcode 6.1.1 не могу бонально вычислить длину строки Swift
Swift 2D Движок для написания игры на SWIFT
Необходимость Swift для не очень опытного разработчика Swift
Swift Swift, what that?
Swift Swift и бд
Потоки в Swift Swift
Массив Swift Swift
Кнопка в Swift Swift
Swift Swift и MySQL
Документация SWIFT Swift
Swift Swift for Windows

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 871
13.12.2016, 19:52     Не могу переписать модель для калькулятора Swift 3.0.1 #2
IpHuman, раз на бесткоре взяли кусок кода, так почему же там и ответ не найти?
IpHuman
13 / 13 / 1
Регистрация: 28.01.2015
Сообщений: 26
13.12.2016, 20:08  [ТС]     Не могу переписать модель для калькулятора Swift 3.0.1 #3
Ryuk, вообще-то это c первоисточника Стэнфордского курса. Не знаю я ваших бесткоров.
Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 871
13.12.2016, 22:57     Не могу переписать модель для калькулятора Swift 3.0.1 #4
IpHuman, тут есть перевод и ответы.
Yandex
Объявления
13.12.2016, 22:57     Не могу переписать модель для калькулятора Swift 3.0.1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru