在静态方法swift中设置委托

问题描述 投票:0回答:1

在我的应用中,我有一个驱动程序将其连接到秤。我的应用程序应在代码的某些部分使用扩展,因此我提供了一个帮助程序来简化代码。我的助手有以下代码:

    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始终为nil,并且从不调用委托方法(在扩展名中查找)。有没有一种方法可以使用带有委托的静态函数?谢谢

ios swift delegates static-methods
1个回答
0
投票

self静态方法内部是指类型本身(在您的情况下为ScalesHelper)也许您需要将ScalesHelper转换为单例类。然后,您将不需要静态函数。这是制作单例课程以供参考的方法https://developer.apple.com/documentation/swift/cocoa_design_patterns/managing_a_shared_resource_using_a_singleton

© www.soinside.com 2019 - 2024. All rights reserved.