Skip to content

Commit 5c022d9

Browse files
committed
Update for Xcode6-beta4 (Swift 1.2) & improve compilation speed by explicitly declaring argument type (while creating expressionSignal).
1 parent 6a5526a commit 5c022d9

File tree

12 files changed

+50
-59
lines changed

12 files changed

+50
-59
lines changed

Cartfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
github "ReactKit/ReactKit" ~> 0.8.0
1+
github "ReactKit/ReactKit" "swift/1.2" #~> 0.8.0

Cartfile.private

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
github "Quick/Quick" ~> 0.2.2
2-
github "Quick/Nimble" ~> 0.3.0
1+
github "Quick/Quick" #~> 0.2.2
2+
github "Quick/Nimble" #~> 0.3.0

Cartfile.resolved

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
github "Quick/Nimble" "v0.3.1"
2-
github "Quick/Quick" "v0.2.2"
3-
github "ReactKit/SwiftTask" "2.6.4"
4-
github "ReactKit/ReactKit" "0.8.0"
1+
github "Quick/Nimble" "v0.4.1"
2+
github "Quick/Quick" "v0.3.0"
3+
github "ReactKit/SwiftTask" "585a97f0e6c2a3c5817b3c603b65aeb6db4667c2"
4+
github "ReactKit/ReactKit" "63d5fae4466cbedbc9cb5f0669d04b76c5c48298"

Carthage/Checkouts/Nimble

Submodule Nimble updated 42 files

ReactKitCalculator.xcodeproj/xcshareddata/xcschemes/ReactKitCalculator-OSX.xcscheme

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,6 @@
2020
ReferencedContainer = "container:ReactKitCalculator.xcodeproj">
2121
</BuildableReference>
2222
</BuildActionEntry>
23-
<BuildActionEntry
24-
buildForTesting = "YES"
25-
buildForRunning = "YES"
26-
buildForProfiling = "NO"
27-
buildForArchiving = "NO"
28-
buildForAnalyzing = "YES">
29-
<BuildableReference
30-
BuildableIdentifier = "primary"
31-
BlueprintIdentifier = "1F97819C1A94984600A7D656"
32-
BuildableName = "ReactKitCalculator-OSXTests.xctest"
33-
BlueprintName = "ReactKitCalculator-OSXTests"
34-
ReferencedContainer = "container:ReactKitCalculator.xcodeproj">
35-
</BuildableReference>
36-
</BuildActionEntry>
3723
</BuildActionEntries>
3824
</BuildAction>
3925
<TestAction
@@ -46,9 +32,9 @@
4632
skipped = "NO">
4733
<BuildableReference
4834
BuildableIdentifier = "primary"
49-
BlueprintIdentifier = "1F97819C1A94984600A7D656"
50-
BuildableName = "ReactKitCalculator-OSXTests.xctest"
51-
BlueprintName = "ReactKitCalculator-OSXTests"
35+
BlueprintIdentifier = "1F9781B01A9498AD00A7D656"
36+
BuildableName = "ReactKitCalculatorTests.xctest"
37+
BlueprintName = "ReactKitCalculatorTests"
5238
ReferencedContainer = "container:ReactKitCalculator.xcodeproj">
5339
</BuildableReference>
5440
</TestableReference>

ReactKitCalculator/Calculator.swift

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import ReactKit
1212
/// mimics iOS's Calculator.app
1313
public class Calculator
1414
{
15-
public enum Key: NSString
15+
public enum Key: String
1616
{
1717
case Num0 = "0", Num1 = "1", Num2 = "2", Num3 = "3", Num4 = "4", Num5 = "5", Num6 = "6", Num7 = "7", Num8 = "8", Num9 = "9"
1818
case Point = "."
@@ -256,15 +256,15 @@ public class Calculator
256256
/// - [t = 7] "4"
257257
/// - [t = 8] (none)
258258
///
259-
let numBuildSignal: Signal<NSString?> =
259+
let numBuildSignal: Signal<String?> =
260260
mergedKeySignal
261-
.mapAccumulate(nil) { (accumulatedString, newKey) -> NSString? in
261+
.mapAccumulate(nil) { (accumulatedString, newKey) -> String? in
262262

263263
let acc = (accumulatedString ?? Key.Num0.rawValue)
264264

265265
switch newKey {
266266
case .Point:
267-
if acc.containsString(Key.Point.rawValue) {
267+
if acc.rangeOfString(Key.Point.rawValue) != nil {
268268
return acc // don't add another `.Point` if already exists
269269
}
270270
else {
@@ -280,7 +280,7 @@ public class Calculator
280280
return newKey.rawValue // e.g. "0" then "1" will be "1"
281281
}
282282
else {
283-
return (accumulatedString ?? "") + newKey.rawValue // e.g. "12" then "3" will be "123"
283+
return (accumulatedString ?? "") + newKey.rawValue // e.g. "12" then "3" will be "123"
284284
}
285285

286286
case .PlusMinus:
@@ -289,15 +289,15 @@ public class Calculator
289289

290290
// string-based toggling of prefixed "-"
291291
if acc.hasPrefix(Key.Minus.rawValue) {
292-
return acc.substringFromIndex(1)
292+
return acc.substringFromIndex(advance(acc.startIndex, 1))
293293
}
294294
else {
295295
return Key.Minus.rawValue + acc
296296
}
297297

298298
// NOTE: this unaryKey will not contain `.PlusMinus` as `case .PlusMinus` is declared above
299299
case let unaryKey where contains(Key.unaryOperators(), unaryKey):
300-
return newKey.evaluate(acc.doubleValue).calculatorString
300+
return newKey.evaluate((acc as NSString).doubleValue).calculatorString
301301

302302
// comment-out: don't send "0" because it will confuse with `Key.Num0` input
303303
// case .Clear:
@@ -314,7 +314,7 @@ public class Calculator
314314

315315
let numTokenSignal: Signal<_Token> =
316316
numBuildSignal
317-
.map { _Token.Number($0!.doubleValue) }
317+
.map { _Token.Number(($0! as NSString).doubleValue) }
318318

319319
let operatorKeyTokenSignal: Signal<_Token> =
320320
mergedKeySignal
@@ -360,7 +360,7 @@ public class Calculator
360360

361361
case .Clear:
362362
_b.clear()
363-
_b.addNumber(Key.Num0.rawValue.doubleValue)
363+
_b.addNumber((Key.Num0.rawValue as NSString).doubleValue)
364364

365365
case .AllClear:
366366
_b.allClear()
@@ -489,7 +489,12 @@ public class Calculator
489489

490490
self.expressionSignal =
491491
bufferingTokensSignal
492-
.map { tokens in tokens.reduce("") { $0 + ($1.number?.calculatorString ?? $1.operatorKey?.rawValue ?? "") + " " } }
492+
.map { (tokens: [_Token]) in
493+
// NOTE: explicitly declare `acc` & `token` type, or Swift compiler will take too much time for compiling
494+
return tokens.reduce("") { (acc: String, token: _Token) -> String in
495+
return acc + (token.number?.calculatorString ?? token.operatorKey?.rawValue ?? "") + " "
496+
}
497+
}
493498
.peek { println("expressionSignal ---> \($0)") }
494499
}
495500

ReactKitCalculator/Helper.swift

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,11 @@ func _scientificNotation(num: Double) -> ScientificNotation
6161
/// - inf -> "inf"
6262
/// - NaN -> "nan"
6363
///
64-
func _calculatorString(_ num: Double? = nil, raw numString: NSString? = nil, rtrims rtrimsSuffixedPointAndZeros: Bool = true) -> String
64+
func _calculatorString(_ num: Double? = nil, raw numString: String? = nil, rtrims rtrimsSuffixedPointAndZeros: Bool = true) -> String
6565
{
6666
precondition(num != nil || numString != nil, "Either `num` or `numString` must be non-nil.")
6767

68-
let num = num ?? numString!.doubleValue
68+
let num = num ?? (numString! as NSString).doubleValue
6969

7070
// return "inf" or "nan" if needed
7171
if !num.isFinite { return "\(num)" }
@@ -75,7 +75,7 @@ func _calculatorString(_ num: Double? = nil, raw numString: NSString? = nil, rtr
7575
let shouldShowNegativeExponent = (num > -1 && num < 1 && exponent <= -MIN_EXPONENT)
7676
let shouldShowPositiveExponent = ((num > 1 || num < -1) && exponent >= MIN_EXPONENT)
7777

78-
var string: NSString
78+
var string: String
7979

8080
// add exponent, e.g. 1.2345678e+9
8181
if shouldShowPositiveExponent || shouldShowNegativeExponent {
@@ -92,8 +92,8 @@ func _calculatorString(_ num: Double? = nil, raw numString: NSString? = nil, rtr
9292
else {
9393
string = _rtrimFloatString(significand.calculatorString)
9494

95-
if string.length > SIGNIFICAND_DIGIT + 1 { // +1 for `.Point`
96-
string = string.substringToIndex(SIGNIFICAND_DIGIT + 1)
95+
if count(string) > SIGNIFICAND_DIGIT + 1 { // +1 for `.Point`
96+
string = string.substringToIndex(advance(string.startIndex, SIGNIFICAND_DIGIT + 1))
9797
}
9898

9999
// append exponent
@@ -110,7 +110,7 @@ func _calculatorString(_ num: Double? = nil, raw numString: NSString? = nil, rtr
110110
}
111111
// add commas for integer-part
112112
else {
113-
let numString = numString ?? NSString(format: "%0.\(MIN_EXPONENT)f", num)
113+
let numString = numString ?? (NSString(format: "%0.\(MIN_EXPONENT)f", num) as String)
114114
string = _commaString(numString)
115115

116116
if rtrimsSuffixedPointAndZeros {
@@ -122,56 +122,56 @@ func _calculatorString(_ num: Double? = nil, raw numString: NSString? = nil, rtr
122122
}
123123

124124
/// e.g. "12345.67000" -> "12,345.67000" (used for number with non-exponent only)
125-
func _commaString(var string: NSString) -> String
125+
func _commaString(var string: String) -> String
126126
{
127127
// split by `.Point`
128128
let splittedStrings = string.componentsSeparatedByString(Calculator.Key.Point.rawValue)
129-
if let integerString = splittedStrings.first as? String {
129+
if let integerString = splittedStrings.first {
130130

131131
var integerCharacters = Array(integerString)
132132
let isNegative = integerString.hasPrefix(Calculator.Key.Minus.rawValue)
133133

134134
// insert commas
135-
for var i = countElements(integerCharacters) - 3; i > (isNegative ? 1 : 0); i -= 3 {
135+
for var i = count(integerCharacters) - 3; i > (isNegative ? 1 : 0); i -= 3 {
136136
integerCharacters.insert(Character(COMMA_SEPARATOR), atIndex: i)
137137
}
138138

139139
string = String(integerCharacters)
140140

141141
if splittedStrings.count == 2 {
142142
// append `.Point` & decimal-part
143-
string = string + (Calculator.Key.Point.rawValue as String) + (splittedStrings.last! as String)
143+
string = string + Calculator.Key.Point.rawValue + splittedStrings.last!
144144
}
145145
}
146146

147147
var nonNumberCount = 0
148-
for char in string as String {
148+
for char in string {
149149
if char == Character(COMMA_SEPARATOR) || char == Character(Calculator.Key.Point.rawValue) {
150150
nonNumberCount++
151151
}
152152
}
153153

154154
// limit to MAX_DIGIT_FOR_NONEXPONENT considering non-number characters
155-
if string.length > MAX_DIGIT_FOR_NONEXPONENT + nonNumberCount {
156-
string = string.substringToIndex(MAX_DIGIT_FOR_NONEXPONENT + nonNumberCount)
155+
if count(string) > MAX_DIGIT_FOR_NONEXPONENT + nonNumberCount {
156+
string = string.substringToIndex(advance(string.startIndex, MAX_DIGIT_FOR_NONEXPONENT + nonNumberCount))
157157
}
158158

159159
return string
160160
}
161161

162162
/// e.g. "123.000" -> "123"
163-
func _rtrimFloatString(var string: NSString) -> String
163+
func _rtrimFloatString(var string: String) -> String
164164
{
165165
// trim floating zeros, e.g. `123.000` -> `123.`
166-
if string.containsString(Calculator.Key.Point.rawValue) {
166+
if string.rangeOfString(Calculator.Key.Point.rawValue) != nil {
167167
while string.hasSuffix(Calculator.Key.Num0.rawValue) {
168-
string = string.substringToIndex(string.length-1)
168+
string = string.substringToIndex(advance(string.startIndex, count(string)-1))
169169
}
170170
}
171171

172172
// trim suffix `.Point` if needed, e.g. `123.` -> `123`
173173
if string.hasSuffix(Calculator.Key.Point.rawValue) {
174-
string = string.substringToIndex(string.length-1)
174+
string = string.substringToIndex(advance(string.startIndex, count(string)-1))
175175
}
176176

177177
return string

ReactKitCalculatorTests/ExpressionSpec.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class ExpressionSpec: QuickSpec
2424
p = _Peripheral()
2525

2626
calculator = Calculator { mapper in
27-
let signal = KVO.signal(p, "input").map { $0 as NSString? } //.asSignal(NSString?)
27+
let signal = KVO.signal(p, "input").map { $0 as? NSString } //.asSignal(NSString?)
2828

2929
for key in Calculator.Key.allKeys() {
3030
mapper[key] = signal.filter { $0 == key.rawValue }.map { _ -> Void in } //.asSignal(Void)

ReactKitCalculatorTests/OutputSpec.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class OutputSpec: QuickSpec
2424
p = _Peripheral()
2525

2626
calculator = Calculator { mapper in
27-
let signal = KVO.signal(p, "input").map { $0 as NSString? } //.asSignal(NSString?)
27+
let signal = KVO.signal(p, "input").map { $0 as? NSString } //.asSignal(NSString?)
2828

2929
for key in Calculator.Key.allKeys() {
3030
mapper[key] = signal.filter { $0 == key.rawValue }.map { _ -> Void in } //.asSignal(Void)
@@ -288,10 +288,10 @@ class OutputSpec: QuickSpec
288288
expect(p.output!).to(equal("3"))
289289

290290
p.input = "="
291-
expect(p.output!).to(beginWith("0.666"))
291+
expect(p.output!).to(contain("0.666")) //.to(beginWith("0.666"))
292292

293293
p.input = "="
294-
expect(p.output!).to(beginWith("0.222"))
294+
expect(p.output!).to(contain("0.222")) //.to(beginWith("0.222"))
295295

296296
}
297297
}

0 commit comments

Comments
 (0)