在我的工作中,我发现一个事实,就是只要应用程序正在运行,我经常需要存储一些属性,以便可以从不同的文件和类访问它们。
这是一个例子。我在Google云端硬盘中授权了一个用户,并且需要将该用户保存到变量中,以便在另一个类中引用该用户。我在该类上声明了全局常量,但是我不确定这是否是一个好习惯。如果我在类中声明此变量并通过该类的实例访问它,则我的应用程序将无法运行。
public var googleUser: GIDGoogleUser?
class MyViewController: UIViewController {
...
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!,
withError error: Error!) {
googleUser = user //Here I save user to googleUser property
}
...
}
class GoogleDriveService {
...
private lazy var driveService: GTLRDriveService = {
let service = GTLRDriveService()
if let user = googleUser { //Here I use googleUser property
service.authorizer = user.authentication.fetcherAuthorizer()
}
service.shouldFetchNextPages = true
service.isRetryEnabled = true
return service
}()
//Then I use the driveService property in some methods like fetchFileList, download and other, which I call from different View Controllers referring to an instance of the GoogleDriveService class
...
}
您可以使用结构的静态变量来做到这一点:
struct Repository {
static var googleUser: String?
}
并googleUser
使用结构类型进行访问/设置:
Repository.googleUser = user
甚至更好,使用像这样的单例类:
class Repository {
static let shared = Repository()
var googleUser: String?
}
那么您可以直接使用它:
Repository.shared.googleUser = user
或将单例实例注入要使用的任何类googleUser
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句