Форум программистов, компьютерный форум, киберфорум
Наши страницы
Swift
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
IpHuman
14 / 14 / 2
Регистрация: 28.01.2015
Сообщений: 26
#1

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

13.12.2016, 19:34. Просмотров 831. Ответов 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?)->())?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2016, 19:34
Ответы с готовыми решениями:

Ошибка в коде ,не могу разобраться Swift 2
let motionManeger = CMMotionManager() ...

Swift, xcode 6.1.1 не могу бонально вычислить длину строки
Недавно начал программировать на swift. Хcode ругается на следующую строку в...

2D Движок для написания игры на SWIFT
Доброго времени суток, программисты! Проблема тут у меня. Подскажите какой...

Посоветуйте книги для Swift и iOS разработки
Здравствуйте, посбрасывайте пожалуйста сюда книги по которым вы учились или они...

Необходимость Swift для не очень опытного разработчика
Всем привет! Возможно, мой вопрос покажется надуманным, но меня это...

3
Ryuk
179 / 177 / 56
Регистрация: 10.06.2011
Сообщений: 871
13.12.2016, 19:52 #2
IpHuman, раз на бесткоре взяли кусок кода, так почему же там и ответ не найти?
0
IpHuman
14 / 14 / 2
Регистрация: 28.01.2015
Сообщений: 26
13.12.2016, 20:08  [ТС] #3
Ryuk, вообще-то это c первоисточника Стэнфордского курса. Не знаю я ваших бесткоров.
0
Ryuk
179 / 177 / 56
Регистрация: 10.06.2011
Сообщений: 871
13.12.2016, 22:57 #4
IpHuman, тут есть перевод и ответы.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2016, 22:57

Программа с библиотеками калькулятора. Не могу собрать
Максимально подробно. Есть компьютер с win7 на котором виртуальная машина...

Не могу построить 3D модель
Задали построить 3D модели 4-х чертежей. Первые два вроде построил, а последние...

Backspace для калькулятора
объясните почему не работает мой бэкспэйс case '&lt;': ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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