繁体   English   中英

快速-通过应用程序使用数据

[英]Swift- Use data through app

我正在开发每日应用程序的报价,所以我创建了一个报价类:

import Foundation
class Quote {
  let quote: String?
  let author: String?
  let backgroundImage: UIImage?
}

然后,我创建了一个加载屏幕,该屏幕从外部数据库获取当天数据的报价,并从带有数据影响的Quote类中创建一个新实例:

import UIKit
import Parse
class LoadingViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()
    //
    //check for internet connection and fecth data
    //
    //assign each data to a variable of quote object 
    ///q, a and bI are variables that represents quote, author and image

    let quoteOfTheDay = Quote()
    quoteOfTheDay.quote = q
    quoteOfTheDay.author = a
    quoteOfTheDay.backgroundImage = bI

    //---perform segue to main view controller
  }

}

之后,我想与所有其他viewController共享一天实例的报价,直到我的应用终止。 如果退出,则将再次将用户定向到加载视图控制器以获取数据。 否则,此quoteOfTheDay实例需要保持活动状态,并被其他屏幕使用,就像在应用程序处于活动状态时被缓存一样。 我怎样才能做到这一点?

请注意,我不想继续使用prepareForSegue传递此实例。

谢谢!

您可以像这样使用单例:

import Foundation
class Quote {
  let quote: String?
  let author: String?
  let backgroundImage: UIImage?

  class var sharedInstance: Quote {
    struct Singleton {
      static let instance = Quote()
    }
    return Singleton.instance
  }
}

现在您可以打电话

Quote.sharedInstance

此处快速了解有关设计模式的更多详细信息

您将在此处找到很多有关singleton的代码演示

@rmaddy和@adamPro提出了我忘记提及的重要方面:

  • 您必须对这位设计师保持谨慎,因为它会在您的应用程序的生命周期中一直保留在内存中(因此,这里不会加载图像和视频,也不要滥用这种设计师)
  • 顾名思义,您可以只创建一个单例实例,如果您认为将来可能需要,则应该寻找一种更合适的方法来使用
  • 在大多数苹果社区中,Singletons的视野不佳,似乎正在迅速改变,但是在其他语言中已广泛使用

您可以在Quote类中设置一个静态属性来存储当天的报价。

class Quote: NSObject {
     static var quoteOfTheDay: Quote?

     //Other Quote Code...
}

然后访问:

let quote = Quote.quoteOfTheDay as Quote!

请记住,但是如果您尝试使用上述方法访问quoteOfTheDay为nil时,应用程序将崩溃。 因此,您可能要考虑以更安全的方式访问它,或者不将其存储为可选内容。

您是否考虑过将Quote对象写入磁盘档案? 也许在应用程序支持中? 通过使用利用报价产生日期的命名约定,用户甚至可以在同一天的后续启动中检索它。 然后,您可以在另一天的下一次启动时将其删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM