在静态方法中设置委托 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
始终为 nil,并且它从不调用委托方法(查看扩展)。有一种方法可以使用委托来使用静态函数吗?
谢谢
self 在静态方法中指的是类型本身(在你的例子中是 ScalesHelper)
也许您需要将 ScalesHelper 转换为单例 class。那么你将不需要静态函数。
下面是如何制作单例class供大家参考
https://developer.apple.com/documentation/swift/cocoa_design_patterns/managing_a_shared_resource_using_a_singleton
在我的应用程序中,我有一个驱动程序可以将它连接到秤上。我的应用程序应该在几部分代码中使用缩放,所以我制作了一个帮助程序来简化代码。 我的助手有这个代码:
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,并且它从不调用委托方法(查看扩展)。有一种方法可以使用委托来使用静态函数吗?
谢谢
self 在静态方法中指的是类型本身(在你的例子中是 ScalesHelper) 也许您需要将 ScalesHelper 转换为单例 class。那么你将不需要静态函数。 下面是如何制作单例class供大家参考 https://developer.apple.com/documentation/swift/cocoa_design_patterns/managing_a_shared_resource_using_a_singleton