Как использовать BehaviorRelay в качестве альтернативы переменной в RxSwift?

Perfect Singleton Class, который может избежать создания экземпляра во время сериализации, клонирования и отражения.

import java.io.Serializable;

public class Singleton implements Cloneable, Serializable {

    private static final long serialVersionUID = 1L;
    private static volatile Singleton instance;

    private Singleton() {
        if (instance != null) {
            throw new InstantiationError("Error creating class");
        }
    }

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {

                if (instance == null) {
                    return new Singleton();
                }
            }
        }
        return null;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        throw new CloneNotSupportedException();
    }

    Object readResolve() {
        return Singleton.getInstance();
    }

}
44
задан Sandeep Bhandari 23 November 2017 в 09:59
поделиться

1 ответ

Я создал их это расширение с двумя методами для упрощения миграции в случае, если у Вас есть Переменная Массива, и необходимо использовать, добавляют.

    extension BehaviorRelay where Element: RangeReplaceableCollection {

        func append(_ subElement: Element.Element) {
            var newValue = value
            newValue.append(subElement)
            accept(newValue)
        }

        func append(contentsOf: [Element.Element]) {
            var newValue = value
            newValue.append(contentsOf: contentsOf)
            accept(newValue)
        }

        public func remove(at index: Element.Index) {
            var newValue = value
            newValue.remove(at: index)
            accept(newValue)
        }

        public func removeAll() {
            var newValue = value
            newValue.removeAll()
            accept(newValue)
        }

    }

и Вы называете его как это

    var things = BehaviorRelay<[String]>(value: [])
    things.append("aa")
    let otherThings = ["bb", "cc"]
    things.append(contentsOf: otherThings) 
    things.remove(at: 0)
    things.removeAll()
0
ответ дан sazz 4 August 2019 в 17:30
поделиться
  • 1
    +1 для того, чтобы сказать этот " Используя статическую проблему порядка инициализации, поскольку оправдание не представлению этой функции на язык и всегда было вопросом статус-кво - это wasn' t представленный, потому что это wasn' представленные t и люди продолжают думать, что порядок инициализации был причиной не представить его, даже если проблема порядка имеет простой и очень простой problem" . – Nawaz 14 March 2011 в 17:04
Другие вопросы по тегам:

Похожие вопросы: