【问题标题】:Swift Custom UIView class - main thread issue in initializerSwift Custom UIView 类 - 初始化程序中的主线程问题
【发布时间】:2021-08-31 03:06:17
【问题描述】:

我正在使用一个相当简单的“Toast”类,但设置了初始化程序 需要主线程 - 我想将主线程代码驱逐到类 - 这可能吗?

不强制到主线程时的当前错误:

我尝试了一些不同的方法,显然用 dispatchQueue.main.async 换行是不可能的。

我项目中的初始化代码:

作为文本:

 DispatchQueue.main.async {
            
            let toast = ToastView(
                title: "Pas de nouvelles données",
                titleFont: .systemFont(ofSize: 14, weight: .regular),
        
                onTap: { print("Tapped!") }
            )
             
                toast.show()
       }

toast 代码的 GitHub 存储库: https://github.com/PhilippeWeidmann/NotificationToast

有人对我应该如何处理这个问题有任何指示吗?提前致谢。

【问题讨论】:

  • 请将代码发布为文本而不是图像。另外,你是从后台线程初始化对象吗?您需要显示更清晰的代码。
  • 只需将 tost.show() 函数放在主线程上即可。
  • 谢谢...在我的项目中有效,但我不想把它放在我的代码中的主线程中,我想修改 Toast 类来处理主线程部分的事情......这有意义吗?谢谢:)
  • 没有。修改库没有意义。
  • 同意 Raja,你应该把主线程放在你的代码上。如果你想修改 Toast 库,可能只需创建一个 fork 并将 pod 指向正确的 git 源。

标签: swift class grand-central-dispatch toast initializer


【解决方案1】:

更改/修改库中的代码不是一个好方法。您可以简单地向库所有者/开发者添加问题或发送 PR 以进行改进。

但是如果它不在主线程中,您可以再创建一个函数并在主线程上显示警报视图。

这里是扩展部分

extension ToastView {
    static func show(title: String, titleFont: UIFont = .systemFont(ofSize: 13, weight: .regular),
                     subtitle: String? = nil, subtitleFont: UIFont = .systemFont(ofSize: 11, weight: .light),
                     icon: UIImage? = nil, iconSpacing: CGFloat = 16, onTap: (() -> ())? = nil) {
        if Thread.isMainThread {
            ToastView(title: title, titleFont: titleFont, onTap:onTap).show()
            
        } else {
            DispatchQueue.main.async {
                ToastView(title: title, titleFont: titleFont, onTap:onTap).show()
            }
        }
    }
}

用法(不管下面的代码是否在主队列中)

ToastView.show(
                title: "Pas de nouvelles données",
                titleFont: .systemFont(ofSize: 14, weight: .regular),
                onTap: { print("Tapped!") }
            )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-20
    • 2014-11-10
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多