gpt4 book ai didi

ios - RxSwift 格式文本

转载 作者:行者123 更新时间:2023-11-30 11:52:36 25 4
gpt4 key购买 nike

我是 RxSwift 新手,但我正在尝试使用 RxSwift 和 MVVM 模式来格式化一些文本。我有一个文本字段,我希望用户在其中写入他们的信用卡号,并且在他们写入时我想对其进行格式化。

所以当他们写“6789430078303201”时我想将其格式化为:“6789 4300 7830 3201”

关于如何做到这一点有什么建议吗?

亚历山大·阿列克西奇

最佳答案

认为您所描述的问题可以这样解决(不确定格式化代码本身):

textField.rx.controlEvent(.editingChanged)
.subscribe(onNext: { [weak self] _ in
guard let self = self, let text = self.textField.text else { return }
let formatedText = text.replacingOccurrences(of: " ", with: "").enumerated().compactMap({ $0 % 4 == 0 ? " \($1)" : "\($1)" }).joined()
self.textField.text = formatedText
})
.disposed(by: disposeBag)

如果你想要 MVVM 来实现这一点,也许可以这样做:

    textField.rx.text
.orEmpty
.distinctUntilChanged()
.bind(to: viewModel.inputText)
.disposed(by: disposeBag)

viewModel.outputText
.bind(to: textField.rx.text)
.disposed(by: disposeBag)

在你的 viewModel 中:

class ViewModel {
var inputText = BehaviorRelay<String>(value: "")
var outputText = BehaviorRelay<String>(value: "")
private let disposeBag = DisposeBag()

init() {
inputText
.subscribe(onNext: { [weak self] (text) in
guard let self = self else { return }
let formatedText = text.replacingOccurrences(of: " ", with: "").enumerated().compactMap({ $0 % 4 == 0 ? " \($1)" : "\($1)" }).joined()
self.outputText.accept(formatedText)
})
.disposed(by: disposeBag)
}
}

关于ios - RxSwift 格式文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48181488/

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