Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使接收对象对阵列中添加的新元素作出反应?_Ios_Swift_Observable_Rx Swift - Fatal编程技术网

Ios 如何使接收对象对阵列中添加的新元素作出反应?

Ios 如何使接收对象对阵列中添加的新元素作出反应?,ios,swift,observable,rx-swift,Ios,Swift,Observable,Rx Swift,我希望我的subject能够观察myArray上的更改,因此每当myArray添加新元素时,subscription就会触发 var subject = PublishSubject<[String]>() var myArray = ["One", "Two"] subject.flatMap{Observable.from($0)}.subscribe(onNext: { print($0) }).disposed(by: disposeBag) subject.on

我希望我的
subject
能够
观察
myArray
上的更改,因此每当
myArray
添加新元素时,
subscription
就会触发

var subject = PublishSubject<[String]>()
var myArray = ["One", "Two"]

subject.flatMap{Observable.from($0)}.subscribe(onNext: {
    print($0)
}).disposed(by: disposeBag)

subject.onNext(myArray)

myArray.append("Three")

subject.onNext(myArray)
var subject=PublishSubject()
var myArray=[“一”、“二”]
subject.flatMap{Observable.from($0)}.subscribe(onNext:{
印刷品(0美元)
}).处置(由:处置人)
subject.onNext(myArray)
myArray.append(“三”)
subject.onNext(myArray)

它的工作原理是每次更改时将
myArray
添加到
onNext
,但是当
myArray
获得一个新的
元素
而不使用
onNext
时,
订阅
是否有办法自动触发?也许通过将
myArray
变成一个
可观察的

这是一个利用属性包装器的好时机。但是,请注意不要在
结构中使用此选项

@propertyWrapper
class RxPublished<Element> {
    private let subject: BehaviorSubject<Element>
    init(wrapped: Element) {
        subject = BehaviorSubject(value: wrapped)
    }

    deinit {
        subject.onCompleted()
    }

    var wrappedValue: Element {
        get { try! subject.value() }
        set { subject.onNext(newValue) }
    }

    var projectedValue: Observable<Element> {
        subject.asObservable()
    }
}


class MyClass {
    @RxPublished(wrapped: ["One", "Two"]) var myArray: [String]
}

func example() {
    let foo = MyClass()
    _ = foo.$myArray
        .debug("foo.myArray")
        .subscribe()

    foo.myArray.append("Three")
}
@propertyWrapper
类RxPublished{
私人租赁主体:行为主体
init(包装:元素){
subject=BehaviorSubject(值:wrapped)
}
脱硝{
subject.onCompleted()
}
var wrappedValue:元素{
获取{try!subject.value()}
set{subject.onNext(newValue)}
}
var projectedValue:可观察{
subject.asObservable()
}
}
类MyClass{
@RxPublished(包装:[“一”,“两”])var myArray:[字符串]
}
func示例(){
设foo=MyClass()
_=foo.$myArray
.debug(“foo.myArray”)
.subscribe()
foo.myArray.append(“三”)
}

这是利用属性包装器的好时机。但是,请注意不要在
结构中使用此选项

@propertyWrapper
class RxPublished<Element> {
    private let subject: BehaviorSubject<Element>
    init(wrapped: Element) {
        subject = BehaviorSubject(value: wrapped)
    }

    deinit {
        subject.onCompleted()
    }

    var wrappedValue: Element {
        get { try! subject.value() }
        set { subject.onNext(newValue) }
    }

    var projectedValue: Observable<Element> {
        subject.asObservable()
    }
}


class MyClass {
    @RxPublished(wrapped: ["One", "Two"]) var myArray: [String]
}

func example() {
    let foo = MyClass()
    _ = foo.$myArray
        .debug("foo.myArray")
        .subscribe()

    foo.myArray.append("Three")
}
@propertyWrapper
类RxPublished{
私人租赁主体:行为主体
init(包装:元素){
subject=BehaviorSubject(值:wrapped)
}
脱硝{
subject.onCompleted()
}
var wrappedValue:元素{
获取{try!subject.value()}
set{subject.onNext(newValue)}
}
var projectedValue:可观察{
subject.asObservable()
}
}
类MyClass{
@RxPublished(包装:[“一”,“两”])var myArray:[字符串]
}
func示例(){
设foo=MyClass()
_=foo.$myArray
.debug(“foo.myArray”)
.subscribe()
foo.myArray.append(“三”)
}

制作一个符合
可观察的
的包装器结构,它包装您的数组并提供一个
append
方法,该方法附加到包装的数组,但也会触发一个
onNext
事件。最有可能的是,有人已经实现了这样一个东西,所以我会首先搜索它。制作一个符合
observable
的包装器结构,它包装您的数组并提供一个
append
方法,该方法附加到包装的数组,但也会触发
onNext
事件。最有可能的是,有人已经实现了这样一个东西,所以我会首先搜索它。