【问题标题】:Swift: Completion handlers and singletonsSwift:完成处理程序和单例
【发布时间】:2016-07-13 17:01:12
【问题描述】:

我正在尝试使用完成处理程序从 func 返回信息。该函数在一个类中,我使用单例来创建该类的实例,以便调用该函数。出于某种原因,当我使用单例时,我可以访问完成处理程序。

class load {
    static let class = Class()
}

load.class.function(//The completion handler should appear here but doesn't)

【问题讨论】:

  • 那个代码示例太抽象了。你在说什么完成处理程序?
  • @luk2302 我在不同的类中有一个函数需要返回信息,所以我有一个完成处理程序,所以当函数运行完成时,它将返回我需要的信息。要访问该功能,我有一个单例。但是当我尝试通过单例调用函数时,例如:'load.class.function()'。 between () Xcode 应该自动说完成处理程序,因为我引用的函数有一个完成处理程序。抱歉,如果这有点令人困惑,我是 Swift 新手。
  • 不相关,但我建议避免使用 classClass 之类的术语作为属性或类的名称。此外,load 应大写。也许class SingletonManager { static let sharedObjectA = ObjectA() ... } 或类似的东西......
  • 虽然 appzYourLife 的示例是典型的单例模式,但您也可以将您的模式与完成处理程序一起使用。见gist.github.com/robertmryan/7c13073e7b784664b7c0fc0b2807e80f。最重要的是,如果我们要为您提供更多帮助,您需要向我们提供问题的 reproducible example

标签: swift singleton instances completionhandler


【解决方案1】:

这是在 Swift 中使用方法和完成处理程序定义 Singleton 的方式

class Singleton {
    static let sharedInstance = Singleton()
    private init() { }

    func retrieveTheAnswer(completion: (answer:Int) -> ()) {
        completion(answer: 42)
    }
}

这就是你使用它的方式

Singleton.sharedInstance.retrieveTheAnswer { (answer) in
    print(answer)
}

【讨论】:

    【解决方案2】:

    class(不要这样称呼!)只能从 load(不要这样称呼它!)类中访问:

    load.class.function()
    

    【讨论】:

      猜你喜欢
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多