gpt4 book ai didi

ios - 无法在 UIStackview 响应式(Reactive)和声明式 swift 中转换类型的值

转载 作者:行者123 更新时间:2023-11-28 13:29:27 26 4
gpt4 key购买 nike

我正在尝试使 UIStackview 具有反应性和声明性,正如我在此处的问题中所回答的那样 setting ids on item in Stackview但我现在遇到的问题是,当我尝试绑定(bind)到 stackView 时,出现此错误 Cannot convert value of type '(_) -> (@escaping (Int, _.Element, UIView?) -> UIView) -> Disposable' to expected argument type '(Observable<[LandMarkData]?>) -> (_) -> _'

下面是我使用的代码

extension Reactive where Base: UIStackView {

func items<Sequence: Swift.Sequence, Source: ObservableType>(_ source: Source) -> (_ viewForRow: @escaping (Int, Sequence.Element, UIView?) -> UIView) -> Disposable where Source.E == Sequence {
return { viewForRow in
return source.subscribe { event in
switch event {
case .next(let values):
let views = self.base.arrangedSubviews
let viewsCount = views.count
var valuesCount = 0
for (index, value) in values.enumerated() {
if index < viewsCount {
// update views that already exist
_ = viewForRow(index, value, views[index])
}
else {
// add new views if needed
let view = viewForRow(index, value, nil)
self.base.addArrangedSubview(view)
}
valuesCount = index
}
if valuesCount + 1 < viewsCount {
for index in valuesCount + 1 ..< viewsCount {
// remove extra views if necessary
self.base.removeArrangedSubview(views[index])
views[index].removeFromSuperview()
}
}
case .error(let error):
fatalError("Errors can't be allowed: \(error)")
case .completed:
break
}
}
}
}
}

在我的 View Controller 中

var features: [LandMarkData] = [LandMarkData]()
var selectedFeatures: [LandMarkData] = [LandMarkData]()

let stackFeature = UIStackView()
var stv: CheckboxStackView?
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
hideKeyboardWhenTappedAround()
layout()
logic()
tableViewInit()

self.stackFeature.axis = .vertical
self.stackFeature.distribution = .fill
self.stackFeature.spacing = 8

let featured = NetworkAdapter.instance.getFeaturesAmeneities()
.map { $0.data }
.share(replay: 1)

featured
.bind(onNext: { [weak self] in self?.features.append(contentsOf: $0!) })
.disposed(by: disposeBag)


featured
.bind(to: stackFeature.rx.items) { (row, element, view) in
let myView = (view as? CheckboxStackView) ?? CheckboxStackView()

myView.label.text = element.name
myView.checkBox.tag = element.id ?? 0
return myView
}
.disposed(by: disposeBag)

}

对我收到错误的任何帮助和修复表示赞赏

最佳答案

问题是您在需要数组的地方传递了一个可选数组。

关于ios - 无法在 UIStackview 响应式(Reactive)和声明式 swift 中转换类型的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57655773/

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