gpt4 book ai didi

swift - Rx 快速合并和枚举

转载 作者:行者123 更新时间:2023-11-30 11:50:22 27 4
gpt4 key购买 nike

iam 给 rx swift 的消息,我真的需要帮助。首先我有一个名为 Cable 的枚举

enum Cable {
case iphone
case android
case typec

func setProperty() -> (String, String, UIImage, UIImage) {

switch self {
case .iphone:
return ("Apple line" , "1" , #imageLiteral(resourceName: "icon_borrow_tiv_iphone") , #imageLiteral(resourceName: "icon_borrow_t_iphone"))
case .android:
return ("Android line", "2" , #imageLiteral(resourceName: "icon_borrow_tiv_android") , #imageLiteral(resourceName: "icon_borrow_t_android"))
case .typec:
return ("Type-C line" , "3" , #imageLiteral(resourceName: "icon_borrow_tiv_typec") , #imageLiteral(resourceName: "icon_borrow_t_typec"))
}
}

}

我有3个按钮,我们将其称为iphone按钮、android按钮和typec按钮,在这段代码中我试图绑定(bind)它使用接收器

private func bindActions() {
let tapStream = Observable.of(
appleBtn.rx.tap.map ({Cable.iphone.setProperty()}),
androidBtn.rx.tap.map({Cable.android.setProperty()}),
typeCBtn.rx.tap.map ({Cable.typec.setProperty()}))
.merge()

tapStream.map({ name, type, image1, image2 in localized("label.powerBank") + name })
.do(onNext: {[weak self] type in
self?.borrowBtn.isEnabled = true})
.bind(to: lineName)
.disposed(by: disposeBag)

tapStream.map({ name, type, image1, image2 in type})
.bind(to: cableType)
.disposed(by: disposeBag)

tapStream.map({ name, type, image1, image2 in image1})
.bind(to: powerBankImage.rx.image)
.disposed(by: disposeBag)

tapStream.map({ name, type, image1, image2 in image2})
.bind(to: cableImage.rx.image)
.disposed(by: disposeBag)
}

当 applebtn、androidBtn、typeCbtn 使用枚举函数映射值时,它们返回 4 个值,以便我可以在其他流中使用它。问题是我不喜欢现在的情况。我认为 ts 应该是枚举应该有 4 个函数返回其各自的值,例如 setTitle func 返回“Apple Line”(我还没有创建该函数)。但是我如何将此函数设置为其流,例如如果它绑定(bind)到 lineName ,则 map 应调用 setTitle 函数?由于map只返回1个值,即合并时的名称。请帮助我有点迷路

最佳答案

在我了解有关 rx 和 enum 的更多信息后终于找到了我正在寻找的答案所以枚举结构变成这样。

enum Cable{
case iphone
case android
case typec

func cableName() -> (String){

switch self {
case .iphone:
return ("Apple line")
case .android:
return ("Android line")
case .typec:
return ("Type-C line")
}
}

func cableType() -> (String){

switch self {
case .iphone:
return ("1")
case .android:
return ("2")
case .typec:
return ("3")
}
}

func powerBankImage() -> (UIImage) {

switch self {
case .iphone:
return #imageLiteral(resourceName: "icon_borrow_tiv_iphone")
case .android:
return #imageLiteral(resourceName: "icon_borrow_tiv_android")
case .typec:
return #imageLiteral(resourceName: "icon_borrow_tiv_typec")
}
}

func cableImage() -> (UIImage){

switch self {
case .iphone:
return #imageLiteral(resourceName: "icon_borrow_t_iphone")
case .android:
return #imageLiteral(resourceName: "icon_borrow_t_android")
case .typec:
return #imageLiteral(resourceName: "icon_borrow_t_typec")
}
}
}

之后你只需要对选定的函数进行元组

 tapStream.map({ $0.cableName()})
.map({name in localized("label.powerBank") + name})
.bind(to: lineName)
.disposed(by: disposeBag)

关于swift - Rx 快速合并和枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48384278/

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