我如何在 swift3 中将单例类作为委托人
Posted
技术标签:
【中文标题】我如何在 swift3 中将单例类作为委托人【英文标题】:How do i make singleton class as delegator in swift3 【发布时间】:2017-04-22 12:25:37 【问题描述】:我有一个单例类,如下面的代码 sn-p 所示。
protocol EmpLoginDelegate
func empLoginSuccess()
func empLoginFailed()
class CommunicationModule
static let sharedInstance = CommunicationModule()
private init()
var empLoginDelegate:EmpLoginDelegate?
func test()
self.empLoginDelegate?.empLoginSuccess()
我的委托类在下面的代码 sn-p 中显示。
extension LoginViewController: EmpLoginDelegate
func empLoginSuccess()
wrongAttempts = 0
loginSuccess = true
print("EmpLoginIsSuccess")
performSegue(withIdentifier: "attendanceView", sender: self)
func empLoginFailed()
wrongAttempts = wrongAttempts + 1
userNameTextField.shake(count: 3, for: 0.3, withTranslation: 10)
passwordTextField.shake(count: 3, for: 0.3, withTranslation: 10)
loginSuccess = false
loginAlert(alertTitle: "Invalid Credentials", alertMsg: "Your employee id or password is not correct")
当我调用测试函数时,emploginSuccess() 方法不会被调用。测试功能成功执行,没有任何错误。 我认为问题是 empLoginDelegate 未在我的代码中初始化,因此我尝试了可能的方法将其初始化为 self 但对我没有任何作用。 swift3(ios 10.3.1)的单例类中是否有其他方法可以使用委托模式。
【问题讨论】:
您是否尝试通过LoginViewController
内部的方法设置CommunicationModule.sharedInstance.empLoginDelegate = self
?
感谢 vacawama 的快速响应,它解决了我的问题。
不客气。我将评论移至答案。
委托通常被定义为弱,以避免内存泄漏。也许您应该为此检查“var empLoginDelegate”..
感谢您的建议,我会更正它。
【参考方案1】:
确保您与单例正确通信。要将LoginViewController
的实例设置为empLoginDelegate
,请调用:
CommunicationModule.sharedInstance.empLoginDelegate = self
来自LoginViewController
内部的方法。
【讨论】:
【参考方案2】:我觉得这个方法不错,对我来说是最好的方法
final class Singleton
// Can't init is singleton
private init()
//MARK: Shared Instance
static let shared: Singleton = Singleton()
【讨论】:
以上是关于我如何在 swift3 中将单例类作为委托人的主要内容,如果未能解决你的问题,请参考以下文章