99import UIKit
1010
1111class QuizVC : UIViewController , UITextFieldDelegate , QuizDelegate {
12- private var settings : Settings ?
13- private var quiz : Quiz ?
14- private var analyticsService : AnalyticsServiceable ?
15- private var gameCenter : GameCenterable ?
12+ private let settings : Settings
13+ private let quiz : Quiz
14+ private let analyticsService : AnalyticsServiceable
15+ private let gameCenter : GameCenterable
1616
1717 var quizView : QuizView {
1818 if let castedView = view as? QuizView {
@@ -22,12 +22,16 @@ class QuizVC: UIViewController, UITextFieldDelegate, QuizDelegate {
2222 }
2323 }
2424
25- convenience init ( settings: Settings , quiz: Quiz , analyticsService: AnalyticsServiceable , gameCenter: GameCenterable ) {
26- self . init ( )
25+ init ( settings: Settings , quiz: Quiz , analyticsService: AnalyticsServiceable , gameCenter: GameCenterable ) {
2726 self . settings = settings
2827 self . quiz = quiz
2928 self . analyticsService = analyticsService
3029 self . gameCenter = gameCenter
30+ super. init ( nibName: nil , bundle: nil )
31+ }
32+
33+ required init ? ( coder aDecoder: NSCoder ) {
34+ fatalError ( " init(coder:) has not been implemented " )
3135 }
3236
3337 override func loadView( ) {
@@ -41,9 +45,6 @@ class QuizVC: UIViewController, UITextFieldDelegate, QuizDelegate {
4145
4246 override func viewWillAppear( _ animated: Bool ) {
4347 super. viewWillAppear ( animated)
44- guard let quiz = quiz else {
45- fatalError ( " quiz was nil. " )
46- }
4748 quiz. delegate = self
4849 switch quiz. quizState {
4950 case . notStarted, . finished:
@@ -68,19 +69,10 @@ class QuizVC: UIViewController, UITextFieldDelegate, QuizDelegate {
6869 }
6970 quizView. startRestartButton. pulsate ( )
7071 authenticate ( )
71- analyticsService? . recordVisitation ( viewController: " \( QuizVC . self) " )
72+ analyticsService. recordVisitation ( viewController: " \( QuizVC . self) " )
7273 }
7374
7475 private func authenticate( ) {
75- guard let settings = settings else {
76- fatalError ( " settings was nil. " )
77- }
78- guard let analyticsService = analyticsService else {
79- fatalError ( " analyticsService was nil. " )
80- }
81- guard let gameCenter = gameCenter else {
82- fatalError ( " gameCenter was nil. " )
83- }
8476 if !gameCenter. isAuthenticated && settings. userRejectedGameCenter {
8577 if !settings. didShowGameCenterDialog {
8678 showGameCenterDialog ( )
@@ -91,33 +83,21 @@ class QuizVC: UIViewController, UITextFieldDelegate, QuizDelegate {
9183 }
9284
9385 private func showGameCenterDialog( ) {
94- guard let settings = settings else {
95- fatalError ( " settings was nil. " )
96- }
97- guard let analyticsService = analyticsService else {
98- fatalError ( " analyticsService was nil. " )
99- }
100- guard let gameCenter = gameCenter else {
101- fatalError ( " gameCenter was nil. " )
102- }
10386 settings. didShowGameCenterDialog = true
10487 let gameCenterController = UIAlertController ( title: " Game Center " , message: " Would you like Conjugar to upload your future scores to Game Center after your quiz? See how you stack up against the global community of conjugators. " , preferredStyle: UIAlertController . Style. alert)
10588 let noAction = UIAlertAction ( title: " No " , style: UIAlertAction . Style. destructive) { _ in
10689 SoundPlayer . play ( . sadTrombone)
107- settings. userRejectedGameCenter = true
90+ self . settings. userRejectedGameCenter = true
10891 }
10992 gameCenterController. addAction ( noAction)
11093 let yesAction = UIAlertAction ( title: " Yes " , style: UIAlertAction . Style. default) { _ in
111- gameCenter. authenticate ( analyticsService: analyticsService, completion: nil )
94+ self . gameCenter. authenticate ( analyticsService: self . analyticsService, completion: nil )
11295 }
11396 gameCenterController. addAction ( yesAction)
11497 present ( gameCenterController, animated: true , completion: nil )
11598 }
11699
117100 @objc func startRestart( ) {
118- guard let quiz = quiz else {
119- fatalError ( " quiz was nil. " )
120- }
121101 SoundPlayer . play ( . gun)
122102 quiz. start ( )
123103 quizView. startRestartButton. setTitle ( " Restart " , for: . normal)
@@ -127,7 +107,7 @@ class QuizVC: UIViewController, UITextFieldDelegate, QuizDelegate {
127107 quizView. showInProgressUI ( )
128108 quizView. startRestartButton. pulsate ( )
129109 quizView. conjugationField. becomeFirstResponder ( )
130- analyticsService? . recordQuizStart ( )
110+ analyticsService. recordQuizStart ( )
131111 }
132112
133113 func scoreDidChange( newScore: Int ) {
@@ -157,12 +137,6 @@ class QuizVC: UIViewController, UITextFieldDelegate, QuizDelegate {
157137 }
158138
159139 func quizDidFinish( ) {
160- guard let analyticsService = analyticsService else {
161- fatalError ( " analyticsService was nil. " )
162- }
163- guard let quiz = quiz else {
164- fatalError ( " quiz was nil. " )
165- }
166140 quizView. hideInProgressUI ( )
167141 quizView. startRestartButton. setTitle ( " Start " , for: . normal)
168142 let applauseIndex = Int . random ( in: 1 ... Sound . applauseCount)
@@ -182,9 +156,6 @@ class QuizVC: UIViewController, UITextFieldDelegate, QuizDelegate {
182156 }
183157
184158 func textFieldShouldReturn( _ textField: UITextField ) -> Bool {
185- guard let quiz = quiz else {
186- fatalError ( " quiz was nil. " )
187- }
188159 guard let text = quizView. conjugationField. text else { return false }
189160 guard text != " " else { return false }
190161 quizView. conjugationField. resignFirstResponder ( )
0 commit comments