-
Notifications
You must be signed in to change notification settings - Fork 11
/
autoRegister.swift
86 lines (72 loc) · 2.06 KB
/
autoRegister.swift
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
84
85
//
// main.swift
// euler
//
// Created by David Grandinetti on 8/27/14.
// Copyright (c) 2014 David Grandinetti. All rights reserved.
//
import Foundation
@objc class EulerProblemDict {
@objc class var sharedInstance : Dictionary<Int,String> {
struct Static {
static var onceToken : dispatch_once_t = 0
static var instance : Dictionary<Int,String>? = nil
}
dispatch_once(&Static.onceToken) {
println("EulerProblemDict: init static dictionary")
Static.instance = Dictionary<Int,String>()
}
return Static.instance!
}
class func load() {
println("EulerProblemDict: +load()")
EulerProblemDict.sharedInstance
}
}
@objc class EulerProblem {
class func load() {
let clazz = NSStringFromClass(self).componentsSeparatedByString(".").last!
println("EulerProblem: +load() for class = \(clazz)")
if let problemNumber:String = clazz.componentsSeparatedByString("Problem").last {
if let num = problemNumber.toInt() {
var dict = EulerProblemDict.sharedInstance
dict[num] = clazz
println("problem[\(num)] = \(clazz)")
}
}
}
class func run() {
println("OVERRIDE ME")
}
class func allProblems() -> Dictionary<Int,String> {
return EulerProblemDict.sharedInstance
}
}
class Problem1: EulerProblem {
override class func load() {
let clazz = NSStringFromClass(self).componentsSeparatedByString(".").last!
println("EulerProblem: +load() for class = \(clazz)")
if let problemNumber:String = clazz.componentsSeparatedByString("Problem").last {
if let num = problemNumber.toInt() {
var dict = EulerProblemDict.sharedInstance
dict[num] = clazz
println("problem[\(num)] = \(clazz)")
}
}
}
override class func run() {
println("Problem1: RUNNING")
}
}
class Problem2: EulerProblem {
override class func load() {
super.load()
}
override class func run() {
println("Problem2: RUNNING")
}
}
println("Main: running")
var dict = EulerProblemDict.sharedInstance
Problem2.run()
println("Main: \(dict.count)")