gpt4 book ai didi

ios - 常规委托(delegate)和 ProxyDelegate RxSwift

转载 作者:行者123 更新时间:2023-12-01 22:00:01 24 4
gpt4 key购买 nike

我是 RxSwift 的新手,正在尝试实现这个框架 https://github.com/rubygarage/collection-view-layouts进入我的项目。

到目前为止,我有这个:

extension BaseLayout: HasDelegate {
public typealias Delegate = LayoutDelegate
}

class RxLayoutDelegateDelegateProxy: DelegateProxy<BaseLayout, LayoutDelegate>, DelegateProxyType, LayoutDelegate {
public weak private(set) var baseLayout: BaseLayout?

public init(baseLayout: ParentObject) {
self.baseLayout = baseLayout
super.init(parentObject: baseLayout,
delegateProxy: RxLayoutDelegateDelegateProxy.self)
}

static func registerKnownImplementations() {
self.register { RxLayoutDelegateDelegateProxy(baseLayout: $0) }
}
}

extension Reactive where Base: BaseLayout {

public var delegate: DelegateProxy<BaseLayout, LayoutDelegate> {
return RxLayoutDelegateDelegateProxy.proxy(for: base)
}

var cellSize: ControlEvent<CGSize> {

}
}

但是,一旦我有照片,我仍然无法弄清楚如何传递图像大小。有人可以帮忙吗?
谢谢!

最佳答案

你很亲密。因为委托(delegate)方法返回一个值,所以你必须像 items 那样实现它。 UITableView 响应式扩展中的函数。像这样的东西:

extension BaseLayout: HasDelegate {
public typealias Delegate = LayoutDelegate
}

class LayoutDelegateProxy
: DelegateProxy<BaseLayout, LayoutDelegate>
, DelegateProxyType
, LayoutDelegate {

init(parentObject: BaseLayout) {
super.init(parentObject: parentObject, delegateProxy: LayoutDelegateProxy.self)
}

deinit {
_cellSize.onCompleted()
}

public static func registerKnownImplementations() {
self.register { LayoutDelegateProxy(parentObject: $0) }
}

func cellSize(indexPath: IndexPath) -> CGSize {
return (try? _cellSize.value())?[indexPath] ?? CGSize.zero
}

fileprivate let _cellSize = BehaviorSubject<[IndexPath: CGSize]>(value: [:])
}

extension Reactive where Base: BaseLayout {
var delegate: LayoutDelegateProxy {
return LayoutDelegateProxy.proxy(for: base)
}

func items<Source: ObservableType>(_ source: Source) -> Disposable where Source.Element == [IndexPath: CGSize] {
return source
.bind(to: delegate._cellSize)
}
}

使用示例:
let sizes = Observable<[IndexPath: CGSize]>.just([
IndexPath(item: 0, section: 0): CGSize(width: 50, height: 50),
IndexPath(item: 1, section: 0): CGSize(width: 100, height: 50),
IndexPath(item: 2, section: 0): CGSize(width: 50, height: 100)
])

sizes
.bind(to: baseLayout.rx.items)
.disposed(by: disposeBag)

关于ios - 常规委托(delegate)和 ProxyDelegate RxSwift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60257051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com