Skip to content

Commit cbb9a75

Browse files
committed
Merge pull request #25 from adamyanalunas/swift-2.0
Swift 2.0 support
2 parents f94ff76 + 3551d29 commit cbb9a75

16 files changed

+78
-61
lines changed

SwiftState.xcodeproj/project.pbxproj

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,8 @@
323323
1FA61FF71996601000460108 /* Project object */ = {
324324
isa = PBXProject;
325325
attributes = {
326-
LastUpgradeCheck = 0600;
326+
LastSwiftUpdateCheck = 0700;
327+
LastUpgradeCheck = 0700;
327328
ORGANIZATIONNAME = "Yasuhiro Inami";
328329
TargetAttributes = {
329330
1FA61FFF1996601000460108 = {
@@ -493,6 +494,7 @@
493494
COPY_PHASE_STRIP = NO;
494495
CURRENT_PROJECT_VERSION = 1;
495496
ENABLE_STRICT_OBJC_MSGSEND = YES;
497+
ENABLE_TESTABILITY = YES;
496498
GCC_C_LANGUAGE_STANDARD = gnu99;
497499
GCC_DYNAMIC_NO_PIC = NO;
498500
GCC_OPTIMIZATION_LEVEL = 0;
@@ -571,6 +573,7 @@
571573
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
572574
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
573575
MACOSX_DEPLOYMENT_TARGET = 10.9;
576+
PRODUCT_BUNDLE_IDENTIFIER = "com.inamiy.$(PRODUCT_NAME:rfc1034identifier)";
574577
PRODUCT_NAME = "$(PROJECT_NAME)";
575578
SDKROOT = macosx;
576579
SKIP_INSTALL = YES;
@@ -592,6 +595,7 @@
592595
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
593596
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
594597
MACOSX_DEPLOYMENT_TARGET = 10.9;
598+
PRODUCT_BUNDLE_IDENTIFIER = "com.inamiy.$(PRODUCT_NAME:rfc1034identifier)";
595599
PRODUCT_NAME = "$(PROJECT_NAME)";
596600
SDKROOT = macosx;
597601
SKIP_INSTALL = YES;
@@ -612,6 +616,7 @@
612616
);
613617
INFOPLIST_FILE = SwiftStateTests/Info.plist;
614618
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
619+
PRODUCT_BUNDLE_IDENTIFIER = "com.inamiy.$(PRODUCT_NAME:rfc1034identifier)";
615620
PRODUCT_NAME = "$(TARGET_NAME)";
616621
SDKROOT = macosx;
617622
};
@@ -627,6 +632,7 @@
627632
);
628633
INFOPLIST_FILE = SwiftStateTests/Info.plist;
629634
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
635+
PRODUCT_BUNDLE_IDENTIFIER = "com.inamiy.$(PRODUCT_NAME:rfc1034identifier)";
630636
PRODUCT_NAME = "$(TARGET_NAME)";
631637
SDKROOT = macosx;
632638
};
@@ -646,6 +652,7 @@
646652
INFOPLIST_FILE = SwiftStateTests/Info.plist;
647653
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
648654
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
655+
PRODUCT_BUNDLE_IDENTIFIER = "com.inamiy.$(PRODUCT_NAME:rfc1034identifier)";
649656
PRODUCT_NAME = "SwiftStateTests-iOS";
650657
SDKROOT = iphoneos;
651658
};
@@ -661,6 +668,7 @@
661668
INFOPLIST_FILE = SwiftStateTests/Info.plist;
662669
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
663670
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
671+
PRODUCT_BUNDLE_IDENTIFIER = "com.inamiy.$(PRODUCT_NAME:rfc1034identifier)";
664672
PRODUCT_NAME = "SwiftStateTests-iOS";
665673
SDKROOT = iphoneos;
666674
VALIDATE_PRODUCT = YES;
@@ -683,6 +691,7 @@
683691
INFOPLIST_FILE = "$(SRCROOT)/SwiftState/Info.plist";
684692
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
685693
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
694+
PRODUCT_BUNDLE_IDENTIFIER = "com.inamiy.$(PRODUCT_NAME:rfc1034identifier)";
686695
PRODUCT_NAME = "$(PROJECT_NAME)";
687696
SDKROOT = iphoneos;
688697
SKIP_INSTALL = YES;
@@ -702,6 +711,7 @@
702711
INFOPLIST_FILE = "$(SRCROOT)/SwiftState/Info.plist";
703712
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
704713
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
714+
PRODUCT_BUNDLE_IDENTIFIER = "com.inamiy.$(PRODUCT_NAME:rfc1034identifier)";
705715
PRODUCT_NAME = "$(PROJECT_NAME)";
706716
SDKROOT = iphoneos;
707717
SKIP_INSTALL = YES;

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "0610"
3+
LastUpgradeVersion = "0700"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"
@@ -48,6 +48,8 @@
4848
ReferencedContainer = "container:SwiftState.xcodeproj">
4949
</BuildableReference>
5050
</MacroExpansion>
51+
<AdditionalOptions>
52+
</AdditionalOptions>
5153
</TestAction>
5254
<LaunchAction
5355
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
@@ -57,6 +59,7 @@
5759
buildConfiguration = "Debug"
5860
ignoresPersistentStateOnLaunch = "NO"
5961
debugDocumentVersioning = "YES"
62+
debugServiceExtension = "internal"
6063
allowLocationSimulation = "YES">
6164
<MacroExpansion>
6265
<BuildableReference

SwiftState.xcodeproj/xcshareddata/xcschemes/SwiftState-iOS.xcscheme

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "0600"
3+
LastUpgradeVersion = "0700"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"
@@ -48,6 +48,8 @@
4848
ReferencedContainer = "container:SwiftState.xcodeproj">
4949
</BuildableReference>
5050
</MacroExpansion>
51+
<AdditionalOptions>
52+
</AdditionalOptions>
5153
</TestAction>
5254
<LaunchAction
5355
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
@@ -57,6 +59,7 @@
5759
buildConfiguration = "Debug"
5860
ignoresPersistentStateOnLaunch = "NO"
5961
debugDocumentVersioning = "YES"
62+
debugServiceExtension = "internal"
6063
allowLocationSimulation = "YES">
6164
<MacroExpansion>
6265
<BuildableReference

SwiftState/HierarchicalStateMachine.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public typealias HSM = HierarchicalStateMachine<String, String>
2424
//
2525

2626
/// nestable StateMachine with StateType as String
27-
public class HierarchicalStateMachine<S: StateType, E: StateEventType>: StateMachine<S, E>, Printable
27+
public class HierarchicalStateMachine<S: StateType, E: StateEventType>: StateMachine<S, E>, CustomStringConvertible
2828
{
2929
private var _submachines = [String : HSM]()
3030

@@ -61,7 +61,7 @@ public class HierarchicalStateMachine<S: StateType, E: StateEventType>: StateMac
6161
{
6262
assert(state is HSM.State, "HSM state must be String.")
6363

64-
let components = split(state as! HSM.State, maxSplit: 1) { $0 == "." }
64+
let components = split((state as! HSM.State).characters, maxSplit: 1) { $0 == "." }.map { String($0) }
6565

6666
switch components.count {
6767
case 2:
@@ -82,7 +82,7 @@ public class HierarchicalStateMachine<S: StateType, E: StateEventType>: StateMac
8282
public override var state: State
8383
{
8484
// NOTE: returning `substate` is not reliable (as a spec), so replace it with actual `submachine.state` instead
85-
let (submachine, substate) = self._submachineTupleForState(self._state)
85+
let (submachine, _) = self._submachineTupleForState(self._state)
8686

8787
if let submachine = submachine {
8888
self._state = "\(submachine.name).\(submachine.state)" as! State
@@ -110,7 +110,7 @@ public class HierarchicalStateMachine<S: StateType, E: StateEventType>: StateMac
110110

111111
let condition: Condition = { transition -> Bool in
112112

113-
let (fromSubmachine, fromSubstate) = self._submachineTupleForState(route.transition.fromState)
113+
let (fromSubmachine, _) = self._submachineTupleForState(route.transition.fromState)
114114
let (toSubmachine, toSubstate) = self._submachineTupleForState(route.transition.toState)
115115

116116
//
@@ -139,9 +139,9 @@ public class HierarchicalStateMachine<S: StateType, E: StateEventType>: StateMac
139139

140140
let fromState = self.state
141141
let toState = state
142-
let transition = fromState => toState
142+
_ = fromState => toState
143143

144-
let (fromSubmachine, fromSubstate) = self._submachineTupleForState(fromState)
144+
let (fromSubmachine, _) = self._submachineTupleForState(fromState)
145145
let (toSubmachine, toSubstate) = self._submachineTupleForState(toState)
146146

147147
// try changing submachine-internal state

SwiftState/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<key>CFBundleExecutable</key>
88
<string>$(EXECUTABLE_NAME)</string>
99
<key>CFBundleIdentifier</key>
10-
<string>com.inamiy.$(PRODUCT_NAME:rfc1034identifier)</string>
10+
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
1111
<key>CFBundleInfoDictionaryVersion</key>
1212
<string>6.0</string>
1313
<key>CFBundleName</key>

SwiftState/StateMachine.swift

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public class StateMachine<S: StateType, E: StateEventType>
127127
private class func _createUniqueString() -> String
128128
{
129129
var uniqueString: String = ""
130-
for i in 1...8 {
130+
for _ in 1...8 {
131131
uniqueString += String(UnicodeScalar(arc4random_uniform(0xD800))) // 0xD800 = 55296 = 15.755bit
132132
}
133133
return uniqueString
@@ -268,7 +268,7 @@ public class StateMachine<S: StateType, E: StateEventType>
268268
}
269269
}
270270

271-
validHandlerInfos.sort { info1, info2 in
271+
validHandlerInfos.sortInPlace { info1, info2 in
272272
return info1.order < info2.order
273273
}
274274

@@ -504,7 +504,7 @@ public class StateMachine<S: StateType, E: StateEventType>
504504
{
505505
var index = handlerInfos.count
506506

507-
for i in Array(0..<handlerInfos.count).reverse() {
507+
for i in Array(Array(0..<handlerInfos.count).reverse()) {
508508
if handlerInfos[i].order <= newHandlerInfo.order {
509509
break
510510
}
@@ -601,7 +601,7 @@ public class StateMachine<S: StateType, E: StateEventType>
601601
return self.addErrorHandler(order: self.dynamicType._defaultOrder, handler: handler)
602602
}
603603

604-
public func addErrorHandler(#order: HandlerOrder, handler: Handler) -> HandlerID
604+
public func addErrorHandler(order order: HandlerOrder, handler: Handler) -> HandlerID
605605
{
606606
let handlerKey = self.dynamicType._createUniqueString()
607607

@@ -743,7 +743,7 @@ public class StateMachine<S: StateType, E: StateEventType>
743743
}
744744

745745
// increment allCount (+ invoke chainErrorHandler) on any routes
746-
handlerID = self.addHandler(nil => nil, order: 150) { [weak self] context in
746+
handlerID = self.addHandler(nil => nil, order: 150) { context in
747747

748748
shouldIncrementChainingCount = true
749749

@@ -852,9 +852,7 @@ public class StateMachine<S: StateType, E: StateEventType>
852852

853853
public func addEventHandler(event: Event, order: HandlerOrder, handler: Handler) -> HandlerID
854854
{
855-
let transitions = self._routes[event]?.keys
856-
857-
let handlerID = self.addHandler(nil => nil, order: order) { [weak self] context in
855+
let handlerID = self.addHandler(nil => nil, order: order) { context in
858856
if context.event == event {
859857
handler(context)
860858
}

SwiftState/StateRoute.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,22 +49,22 @@ public func => <S: StateType>(leftStates: [S], right: S) -> StateRoute<S>
4949
{
5050
// NOTE: don't reuse "nil => nil + condition" for efficiency
5151
return StateRoute(transition: nil => right, condition: { transition -> Bool in
52-
return contains(leftStates, transition.fromState)
52+
return leftStates.contains(transition.fromState)
5353
})
5454
}
5555

5656
/// e.g. .State0 => [.State1, .State2], allowing [0 => 1, 0 => 2]
5757
public func => <S: StateType>(left: S, rightStates: [S]) -> StateRoute<S>
5858
{
5959
return StateRoute(transition: left => nil, condition: { transition -> Bool in
60-
return contains(rightStates, transition.toState)
60+
return rightStates.contains(transition.toState)
6161
})
6262
}
6363

6464
/// e.g. [.State0, .State1] => [.State2, .State3], allowing [0 => 2, 0 => 3, 1 => 2, 1 => 3]
6565
public func => <S: StateType>(leftStates: [S], rightStates: [S]) -> StateRoute<S>
6666
{
6767
return StateRoute(transition: nil => nil, condition: { transition -> Bool in
68-
return contains(leftStates, transition.fromState) && contains(rightStates, transition.toState)
68+
return leftStates.contains(transition.fromState) && rightStates.contains(transition.toState)
6969
})
7070
}

SwiftState/StateTransition.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public func => <S: StateType>(left: S, right: S) -> StateTransition<S>
5858
// MARK: - Printable
5959
//--------------------------------------------------
6060

61-
extension StateTransition: Printable
61+
extension StateTransition: CustomStringConvertible
6262
{
6363
public var description: String
6464
{

SwiftStateTests/BasicTests.swift

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,17 @@ class BasicTests: _TestCase
1616
let machine = StateMachine<MyState, MyEvent>(state: .State0) { machine in
1717

1818
machine.addRoute(.State0 => .State1)
19-
machine.addRoute(nil => .State2) { context in println("Any => 2, msg=\(context.userInfo!)") }
20-
machine.addRoute(.State2 => nil) { context in println("2 => Any, msg=\(context.userInfo!)") }
19+
machine.addRoute(nil => .State2) { context in print("Any => 2, msg=\(context.userInfo!)") }
20+
machine.addRoute(.State2 => nil) { context in print("2 => Any, msg=\(context.userInfo!)") }
2121

2222
// add handler (handlerContext = (event, transition, order, userInfo))
2323
machine.addHandler(.State0 => .State1) { context in
24-
println("0 => 1")
24+
print("0 => 1")
2525
}
2626

2727
// add errorHandler
2828
machine.addErrorHandler { (event, transition, order, userInfo) in
29-
println("[ERROR] \(transition.fromState) => \(transition.toState)")
29+
print("[ERROR] \(transition.fromState) => \(transition.toState)")
3030
}
3131
}
3232

@@ -36,7 +36,7 @@ class BasicTests: _TestCase
3636
machine <- (.State1, "Bye")
3737
machine <- .State0 // fail: no 1 => 0
3838

39-
println("machine.state = \(machine.state)")
39+
print("machine.state = \(machine.state)")
4040
}
4141

4242
func testExample()
@@ -45,19 +45,19 @@ class BasicTests: _TestCase
4545

4646
// add 0 => 1
4747
$0.addRoute(.State0 => .State1) { context in
48-
println("[Transition 0=>1] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue)")
48+
print("[Transition 0=>1] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue)")
4949
}
5050
// add 0 => 1 once more
5151
$0.addRoute(.State0 => .State1) { context in
52-
println("[Transition 0=>1b] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue)")
52+
print("[Transition 0=>1b] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue)")
5353
}
5454
// add 2 => Any
5555
$0.addRoute(.State2 => nil) { context in
56-
println("[Transition exit 2] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue) (Any)")
56+
print("[Transition exit 2] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue) (Any)")
5757
}
5858
// add Any => 2
5959
$0.addRoute(nil => .State2) { context in
60-
println("[Transition Entry 2] \(context.transition.fromState.rawValue) (Any) => \(context.transition.toState.rawValue)")
60+
print("[Transition Entry 2] \(context.transition.fromState.rawValue) (Any) => \(context.transition.toState.rawValue)")
6161
}
6262
// add 1 => 0 (no handler)
6363
$0.addRoute(.State1 => .State0)
@@ -94,35 +94,35 @@ class BasicTests: _TestCase
9494

9595
// error
9696
$0.addErrorHandler { context in
97-
println("[ERROR 1] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue)")
97+
print("[ERROR 1] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue)")
9898
}
9999

100100
// entry
101101
$0.addEntryHandler(.State0) { context in
102-
println("[Entry 0] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue)") // NOTE: this should not be called
102+
print("[Entry 0] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue)") // NOTE: this should not be called
103103
}
104104
$0.addEntryHandler(.State1) { context in
105-
println("[Entry 1] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue)")
105+
print("[Entry 1] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue)")
106106
}
107107
$0.addEntryHandler(.State2) { context in
108-
println("[Entry 2] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue), userInfo = \(context.userInfo)")
108+
print("[Entry 2] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue), userInfo = \(context.userInfo)")
109109
}
110110
$0.addEntryHandler(.State2) { context in
111-
println("[Entry 2b] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue), userInfo = \(context.userInfo)")
111+
print("[Entry 2b] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue), userInfo = \(context.userInfo)")
112112
}
113113

114114
// exit
115115
$0.addExitHandler(.State0) { context in
116-
println("[Exit 0] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue)")
116+
print("[Exit 0] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue)")
117117
}
118118
$0.addExitHandler(.State1) { context in
119-
println("[Exit 1] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue)")
119+
print("[Exit 1] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue)")
120120
}
121121
$0.addExitHandler(.State2) { context in
122-
println("[Exit 2] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue), userInfo = \(context.userInfo)")
122+
print("[Exit 2] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue), userInfo = \(context.userInfo)")
123123
}
124124
$0.addExitHandler(.State2) { context in
125-
println("[Exit 2b] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue), userInfo = \(context.userInfo)")
125+
print("[Exit 2b] \(context.transition.fromState.rawValue) => \(context.transition.toState.rawValue), userInfo = \(context.userInfo)")
126126
}
127127
}
128128

0 commit comments

Comments
 (0)