首页 > 解决方案 > 如何在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) 
}

标签: iosiphoneswiftxcodesingleton

解决方案


这是一个非常糟糕的架构决策。

其中第一个问题是 API 调用的结果始终是异步的,因此您无法判断您的类在使用它的属性时是否已正确初始化。

您通过创建依赖于网络调用的强制解包选项来创建太多歧义。如果 API 调用失败怎么办?如果互联网连接很慢怎么办,您如何预测此时您的单身人士“很好”?在大多数情况下,您将访问 nil 并且它会使您的应用程序崩溃。

我建议更多阅读单例模式(如果有必要)以及 iOS 中的架构模式。


推荐阅读