Установить делегата в stati c метод swift - PullRequest
0 голосов
/ 31 марта 2020

В моем приложении есть драйвер для подключения к весам. Мое приложение должно использовать масштабирование в нескольких частях кода, поэтому я сделал помощник для упрощения кода. Мой помощник имеет такой код:

    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 и никогда не вызывает методы делегата (смотрите расширение). Есть ли способ использовать stati c fun c с делегатом? Спасибо

1 Ответ

1 голос
/ 31 марта 2020

self in stati c метод относится к самому типу (ScalesHelper в вашем случае). Возможно, вам нужно преобразовать ScalesHelper в одноэлементный класс. Тогда вам не понадобится функция stati c. Вот как сделать класс синглтона для вашей справки https://developer.apple.com/documentation/swift/cocoa_design_patterns/managing_a_shared_resource_using_a_singleton

...