ios - 如何在swift中使用单例访问另一个控制器中的模型类值?
问题描述
我创建了一个带有一些变量的类,并且没有使用任何默认值进行初始化,所有变量都应该在发生 Web 服务调用时分配。所以我已经初始化了类的实例并将值分配给变量。
在这里,我想将这些值访问到整个项目中的所有类文件。是否可以?我不想使用任何保存方法,如核心数据和用户默认值以及可编码的本地存储。
这个你能帮我吗?我们试图在另一个视图控制器中访问模型类值。但是我们得到一个 nil 值。提前致谢。
//MARK: Shared Instance
static let sharedInstance = Singleton()
//MARK: Local Variable
var emptyStringArray : [String]? = nil
var completed : Bool!
var id : Int?
var title : String?
var userId : Int?
//MARK: Init Array
private init() {
}
init(Fromarray dictionary : [String:Any]) {
completed = dictionary["completed"] as? Bool
id = dictionary["id"] as? Int
title = dictionary["title"] as? String
userId = dictionary["userId"] as? Int
}
终于叫进来了
class ViewController2: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let BoolValue = Singleton.sharedInstance.completed
print(BoolValue)
}
解决方案
这是一个非常糟糕的架构决策。
其中第一个问题是 API 调用的结果始终是异步的,因此您无法判断您的类在使用它的属性时是否已正确初始化。
您通过创建依赖于网络调用的强制解包选项来创建太多歧义。如果 API 调用失败怎么办?如果互联网连接很慢怎么办,您如何预测此时您的单身人士“很好”?在大多数情况下,您将访问 nil 并且它会使您的应用程序崩溃。
我建议更多阅读单例模式(如果有必要)以及 iOS 中的架构模式。
推荐阅读
- windows - 无法通过 SSH 连接到 Azure Windows Server VM
- python - 谁在他们的公司中使用 pyenv?
- python - 如何在 Python 中绘制 Google QuickDraw 数据集?
- c# - 如何在仅数字排序的字母数字中使用顺序
- powershell - 使用 powershell 在 powerpoint 中编辑形状
- android - 为什么在 Android 中为 NumberPicker 设置 textcolor 时会发生 NoSuchFieldException?
- azure-logic-apps - 如何检索多个逻辑应用程序的“已完成运行”计数
- php - ~/.composer/vendor/laravel/valet/server.php 中的权限被拒绝
- ruby-on-rails - 无法将 project_id 设置为嵌套路由中的数据库
- php - 无法使用 curl 或 file_get_contents 在单独的网站上执行命令