Зачем нам нужен класс обслуживания с использованием синглтона в Swift? - PullRequest
0 голосов
/ 30 сентября 2018

Я смотрю учебник по области от youtube, инструктор, использующий синглтон в классе обслуживания, как показано ниже:

import Foundation
import RealmSwift

class RealmService {

    // singleton
    private init() {}
    static let shared = RealmService()

    var realm = try! Realm()

    func save<T: Object>(object: T) {

        do {

            try realm.write {
                realm.add(object)
            }

        } catch {
            post(error)
        }

    }

    func update<T: Object>(object: T, for dictionary: [String: Any?]) {

        do {

            try realm.write {

                for (key,value) in dictionary {
                    object.setValue(value, forKey: key)
                }

            }

        } catch {
            post(error)
        }

    }

    func delete<T: Object>(object: T) {

        do {

            try realm.write {
                realm.delete(object)
            }

        } catch {
            post(error)
        }

    }


    func post(_ error: Error) {
        NotificationCenter.default.post(name: Notification.Name.realmError, object: error)
    }


    func observerRealmErrors(in vc: UIViewController, completion: @escaping(Error?) -> Void ) {

        NotificationCenter.default.addObserver(forName: Notification.Name.realmError, object: nil, queue: nil) { (notification) in
            completion(notification.object as? Error)
        }

    }

    func stopObservingErrors(in vc: UIViewController) {
        NotificationCenter.default.removeObserver(vc, name: NSNotification.Name.realmError, object: nil)
    }



}

Я понимаю, что синглтон - это объект, который создается только один раз.но почему для этого нужно использовать синглтон?если код подобен приведенному ниже, я понимаю, потому что не имеет никакого смысла, если в качестве идентификатора используется более одного «bobby», тогда имеет смысл создать синглтон-класс

, но как насчет этого?сервис области как код выше?почему нужно использовать синглтон?Я видел, как какой-то инструктор использовал синглтон для класса обслуживания

class AccountManager {
  static let sharedInstance = AccountManager()

  var userInfo = (ID: "Bobby", Password: 01036343984)

  // Networking: communicating server
  func network() {
    // get everything
  }

  private init() { }
}

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Все просто.Если вы не пытаетесь использовать синглтон в realm случае, как вы написали, вы должны вызывать метод realm = try! Realm() каждый раз, когда вы пытаетесь использовать объекты или функции области (сохранение, удаление и т. Д.).Это сделает ваш код слишком скучным, а также может стать причиной многих ошибок.Если вы используете область с одноэлементным кодом, который вы написали (он написал с помощью универсальных функций), вы можете сохранить свой объект в базе данных области с помощью всего одной строки кода, например RealmService.save(yourobject).

0 голосов
/ 30 сентября 2018

Вы привели пример общего свойства (userInfo) во втором блоке, но в первом блоке инструктор использует синглтон, чтобы не допускать дублирования кода везде внутри проекта, и иметь только один отдельный блок длявыполнять операции crud (создание, чтение, обновление, удаление) базы данных Realm, и это еще одно использование одноэлементного класса, отличное от совместного использования значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...