aboutsummaryrefslogtreecommitdiffhomepage
path: root/Example/tvOSSample/tvOSSample/DatabaseViewController.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Example/tvOSSample/tvOSSample/DatabaseViewController.swift')
-rw-r--r--Example/tvOSSample/tvOSSample/DatabaseViewController.swift83
1 files changed, 83 insertions, 0 deletions
diff --git a/Example/tvOSSample/tvOSSample/DatabaseViewController.swift b/Example/tvOSSample/tvOSSample/DatabaseViewController.swift
new file mode 100644
index 0000000..712c48f
--- /dev/null
+++ b/Example/tvOSSample/tvOSSample/DatabaseViewController.swift
@@ -0,0 +1,83 @@
+// Copyright 2017 Google
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+import UIKit
+import FirebaseDatabase
+
+/// A class to demonstrate the Firebase Realtime Database API. This will show a number read
+/// from the Database and increase or decrease it based on the buttons pressed.
+class DatabaseViewController: UIViewController {
+ private enum Counter: Int {
+ case increment = 1
+ case decrement = -1
+
+ var intValue: Int {
+ return rawValue
+ }
+ }
+
+ // MARK: - Interface
+
+ /// Label to display the current value.
+ @IBOutlet weak var currentValue: UILabel!
+
+ // MARK: - User Actions
+
+ /// The increment button was hit.
+ @IBAction func incrementButtonHit(_ sender: UIButton) { changeServerValue(with: .increment) }
+
+ /// the decrement button was hit.
+ @IBAction func decrementButton(_ sender: UIButton) { changeServerValue(with: .decrement) }
+
+ // MARK: - Internal Helpers
+
+ /// Update the number on the server by a particular value. Note: the number passed in should only
+ /// be one above or below the current number.
+ private func changeServerValue(with type: Counter) {
+ let ref = Database.database().reference(withPath: Constants.databasePath)
+ // Update the current value of the number.
+ ref.runTransactionBlock { (currentData) -> TransactionResult in
+ guard let value = currentData.value as? Int else {
+ return TransactionResult.abort()
+ }
+
+ currentData.value = value + type.intValue
+ return TransactionResult.success(withValue: currentData)
+ }
+ }
+
+ // MARK: - View Controller Lifecycle
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+
+ // Observe the current value, and update the UI every time it changes.
+ let ref = Database.database().reference(withPath: Constants.databasePath)
+
+ ref.observe(.value) { [weak self] (snapshot) in
+ guard let value = snapshot.value as? Int else {
+ print("Error grabbing value from Snapshot!")
+ return
+ }
+
+ self?.currentValue.text = "\(value)"
+ }
+ }
+
+ // MARK: - Constants
+
+ private struct Constants {
+ static let databasePath = "magicSyncingCounter"
+ }
+}