7
7
//
8
8
9
9
import UIKit
10
+ import Foundation
11
+
12
+ extension String {
13
+ var length : Int {
14
+ return countElements ( self )
15
+ }
16
+ }
10
17
11
18
class ViewController : UIViewController {
12
19
13
20
@IBOutlet weak var display : UILabel !
21
+ @IBOutlet weak var history : UILabel !
14
22
15
23
var userIsInTheMiddleOfTypingANumber : Bool = false
24
+ var isFloatPoint = false
16
25
17
26
@IBAction func appendDigit( sender: UIButton ) {
18
27
let digit = sender. currentTitle!
19
- if ( userIsInTheMiddleOfTypingANumber) {
28
+ if ( digit == " 0 " && display. text! == " 0 " ) {
29
+
30
+ } else if ( userIsInTheMiddleOfTypingANumber && display. text! != " 0 " ) {
20
31
display. text = display. text! + digit
21
32
} else {
22
33
display. text = digit
23
34
userIsInTheMiddleOfTypingANumber = true
24
35
}
25
-
36
+ }
37
+
38
+ @IBAction func appendFloatPoint( sender: UIButton ) {
39
+ if ( !userIsInTheMiddleOfTypingANumber) {
40
+ display. text = " 0. "
41
+ isFloatPoint = true
42
+ userIsInTheMiddleOfTypingANumber = true
43
+ } else if ( !isFloatPoint) {
44
+ display. text = display. text! + " . "
45
+ isFloatPoint = true
46
+ userIsInTheMiddleOfTypingANumber = true
47
+ }
48
+ }
49
+
50
+ @IBAction func appendPi( sender: UIButton ) {
51
+ if ( userIsInTheMiddleOfTypingANumber) {
52
+ enter ( )
53
+ }
54
+ display. text = " π "
55
+ operandStack. append ( M_PI)
56
+ println ( " operandStack = \( operandStack) " )
26
57
}
27
58
28
59
@IBAction func operate( sender: UIButton ) {
@@ -36,6 +67,8 @@ class ViewController: UIViewController {
36
67
case " + " : performOperation { $1 + $0 }
37
68
case " − " : performOperation { $1 - $0 }
38
69
case " √ " : performOperation { sqrt ( $0) }
70
+ case " sin " : performOperation { sin ( $0) }
71
+ case " cos " : performOperation { cos ( $0) }
39
72
default : break
40
73
}
41
74
}
@@ -58,10 +91,51 @@ class ViewController: UIViewController {
58
91
59
92
@IBAction func enter( ) {
60
93
userIsInTheMiddleOfTypingANumber = false
94
+ isFloatPoint = false
61
95
operandStack. append ( displayValue)
62
96
println ( " operandStack = \( operandStack) " )
63
97
}
64
98
99
+ @IBAction func addHistory( sender: UIButton ) {
100
+ if ( history. text == " History: " ) {
101
+ history. text = sender. currentTitle!
102
+ } else {
103
+ history. text = history. text! + sender. currentTitle!
104
+ }
105
+ }
106
+
107
+ @IBAction func clear( sender: UIButton ) {
108
+ userIsInTheMiddleOfTypingANumber = false
109
+ isFloatPoint = false
110
+ display. text = " 0 "
111
+ history. text = " History: "
112
+ operandStack. removeAll ( )
113
+ println ( " operandStack = \( operandStack) " )
114
+ }
115
+
116
+ @IBAction func backspace( sender: UIButton ) {
117
+ if ( userIsInTheMiddleOfTypingANumber && display. text!. length > 0 ) {
118
+ display. text = display. text!. substringToIndex ( advance ( display. text!. endIndex, - 1 ) )
119
+ //history.text = history.text!.substringToIndex(advance(history.text!.endIndex, -1))
120
+ history. text = dropLast ( history. text!)
121
+ }
122
+ }
123
+
124
+ @IBAction func changeSign( sender: UIButton ) {
125
+ if ( userIsInTheMiddleOfTypingANumber) {
126
+ if ( isFloatPoint) {
127
+ display. text = " \( displayValue * - 1 ) "
128
+ } else {
129
+ display. text = " \( Int ( displayValue) * - 1 ) "
130
+ }
131
+ } else {
132
+ if ( operandStack. count >= 1 ) {
133
+ displayValue = operandStack. removeLast ( ) * - 1
134
+ enter ( )
135
+ }
136
+ }
137
+ }
138
+
65
139
var displayValue : Double {
66
140
get {
67
141
return NSNumberFormatter ( ) . numberFromString ( display. text!) !. doubleValue
0 commit comments