繁体   English   中英

在静态方法swift中设置委托

[英]Set delegate in static method swift

在我的应用程序中,我有一个驱动程序可以将其连接到秤。 我的应用程序应该在代码的几个部分使用缩放,所以我做了一个帮助器来简化代码。 我的帮手有这个代码:

    protocol ScalesHelperDelegate {
        func scalesHelperDelegate_error()
        func scalesHelperDelegate_pluSavedWithSuccess()
    }

    public class ScalesHelper {
        static var delegate: ScalesHelperDelegate?
        public static func getBill(scaleIp:String, scalePort:Int, barcode:String) {
            let scalesManager = ScalesManager.init()
            scalesManager.delegate = self as? ScalesManagerDelegate
            let scaleConfig = ScalesConfig.init(ip: scaleIp, port: scalePort)
            scalesManager.getBillFromScale(config: scaleConfig, scaleType: .type, bill: barcode, time: 3.0)
        }
    }

    extension ScalesHelper: ScalesManagerDelegate {
        public func scalesManagerDelegate_error() {
            ScalesHelper.delegate?.scalesHelperDelegate_error()
        }

        public func scalesManagerDelegate_success(rowsFromScale: [WeightedProduct]?) {
            if let weightedPrd = rowsFromScale {
//For now I don't do nothing
            } else {
                ScalesHelper.delegate?.scalesHelperDelegate_pluSavedWithSuccess()
            }
        }
    }

当我尝试运行应用程序并使用这个助手时,我看到scalesManager.delegate始终为零并且它从不调用委托方法(查看扩展)。 有没有办法使用委托来使用静态函数? 谢谢

静态方法中的 self 指的是类型本身(在您的情况下为 ScalesHelper )也许您需要将 ScalesHelper 转换为单例类。 那么你就不需要静态函数了。 以下是如何制作单例类供您参考https://developer.apple.com/documentation/swift/cocoa_design_patterns/managing_a_shared_resource_using_a_singleton

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM