静的メソッドの迅速でセットデリゲート

lucgian841:

私のアプリでは、私はスケールにそれを接続するドライバをしました。私は簡素化コードにヘルパーを作ったので、私のアプリは、コードのいくつかの部分にスケールを使用する必要があります。私のヘルパーは、このコードを持っています:

    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()
            }
        }
    }

私は、アプリを実行し、このヘルパーIソー使用しようとするとscalesManager.delegate、常にゼロであり、それはデリゲートメソッド(拡張子で見て)を呼び出すことはありませんが。利用者への道は、デリゲートを持つ静的FUNCありますか?ありがとうございました

ossamacpp:

静的メソッド内のselfはたぶん、あなたがシングルトンクラスにScalesHelperを変換する必要があります(あなたのケースでScalesHelper)型自体を指します。そして、あなたは、静的な機能を必要としません。ここにあなたの参考のためにシングルトンクラスを作成する方法であるhttps://developer.apple.com/documentation/swift/cocoa_design_patterns/managing_a_shared_resource_using_a_singleton

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=377584&siteId=1