程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在合并中点击发布者执行两次大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在合并中点击发布者执行两次?

开发过程中遇到在合并中点击发布者执行两次的问题如何解决?下面主要结合日常开发的经验,给出你关于在合并中点击发布者执行两次的解决方法建议,希望对你解决在合并中点击发布者执行两次有所启发或帮助;

我不想使用 savebutton.addTarget(:SELEctor:event) 这就是为什么 我尝试使用 CombineCocoa 框架中的 Tap 发布者

 savebutton.tapPublisher.sink {  _ in
        print("tap") // tap twice
    }
    .store(in: &subscriptions)

当我点击 savebutton 然后“点击”打印两次。

我也尝试使用 Combine 框架

savebutton.publisher(for: .touchUpInsIDE) 

但结果相同。

我的代码在这里

class ArticleVC: UIVIEwController {
    let savebutton: UIbutton = {
        let btn = UIbutton()
        btn.settitle("Save",for: .normal)
        return btn
    }()
    
    var subscriptions: Set<AnyCancellable> = []
    
    overrIDe func vIEwDIDLoad() {
        super.vIEwDIDLoad()
        
        // add to vIEw
        vIEw.addSubvIEw(savebutton)
        dIDTapSave()
        savebutton.snp.makeConsTraints {
            $0.centerX.centerY.equalToSupervIEw()
        }
        
        dIDTapSave()
    }
    
    func dIDTapSave() {
//        savebutton.tapPublisher.sink(receiveValue: { _ in
//            print("tap")  // twice printed 'tap'
//        })
//        .store(in: &subscriptions)
        /// OR
        savebutton.publisher(for: .touchUpInsIDE).sink { _ in
            print("tap") // twice printed 'tap'
        }
        .store(in: &subscriptions)
    }
}

这是什么原因?

解决方法

我的猜测是您正在创建管道两次。但是您没有显示您创建管道的位置,所以这只是一个猜测。 [编辑:在我发布这个答案之后,你在问题中发布了你的代码,我的猜测显然是正确的,因为我们现在可以看到你正在创建管道两次。]

为了支持这一点,我将展示我所做的:

  • 我创建了一个新的 iOS 项目。

  • 我在界面中放置了一个按钮,并从我的 ViewController 中连接了一个插座。

  • 我安装了软件包 https://github.com/CombineCommunity/CombineCocoa.git

  • 我配置了我的 ViewController 代码:

import UIKit
import Combine
import CombineCocoa

class ViewController: UIViewController {
    @IBOutlet weak var button: UIButton!
    var storage = Set<AnyCancellable>()
    override func viewDidLoad() {
        super.viewDidLoad()
        button.tapPublisher
            .sink { _ in print("tap") }
            .store(in: &storagE)
    }
}

这就是所有的代码。我运行项目,我点击按钮,我看到“点击”一次。结束。

大佬总结

以上是大佬教程为你收集整理的在合并中点击发布者执行两次全部内容,希望文章能够帮你解决在合并中点击发布者执行两次所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: