Swift-通过应用

时间:2015-05-21 21:50:06

标签: ios swift ios8

我正在开发当天app的引用,所以我创建了一个引用类:

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

然后我创建了一个加载屏幕,从外部数据库中获取日期数据的引用,并从类引用中创建一个新实例,其中包含数据:

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
  }

}

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

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

谢谢!

3 个答案:

答案 0 :(得分:3)

你可以使用这样的单身:

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

有关swift here

中设计模式的更多详细信息

你会在here

中找到很多针对单身人士的代码演示

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

  • 你必须小心这位设计师,因为它留在记忆中 你的应用程序的生命周期(所以没有在这里加载图像和视频,并做 不要滥用这种设计师)
  • 另外顾名思义你可以创建一个单例实例,如果你认为将来你可能需要 寻找更合适的方法来使用
  • 单身人士在大多数苹果社区都没有很好的观点,似乎这种情况正在迅速发生变化,但是它在其他语言中被大量使用

答案 1 :(得分:0)

您可以在Quote类中设置静态属性以存储当天的引用。

class Quote: NSObject {
     static var quoteOfTheDay: Quote?

     //Other Quote Code...
}

然后访问:

let quote = Quote.quoteOfTheDay as Quote!

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

答案 2 :(得分:-1)

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