我正在开发当天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传递此实例。
谢谢!
答案 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对象写入磁盘存档?也许在应用程序支持?通过使用利用生成报价的日期的命名约定,用户甚至可以在同一天的稍后启动中检索它。然后,您可以在下一次发布时将其删除。