![](/img/trans.png)
[英]How to create a model class and access the values from JSON response using Codable in ios swift?
[英]How to access model class values in another controller using singleton in swift?
我创建了一个带有一些变量的类,并且未使用任何默认值进行初始化,在进行Web服务调用时应分配所有变量。 因此,我已经初始化了类的实例,并将值分配给了变量。
在这里,我想将这些值访问整个项目中的所有类文件。 可能吗? 我不想使用任何保存方法,例如核心数据和用户默认值,也可以编码本地存储。
这个你能帮我吗? 我们试图在另一个视图控制器中访问模型类的值。 但是我们得到一个零值。 提前致谢。
//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,这将使您的应用程序崩溃。
我建议更多阅读Singleton模式(如果需要)以及iOS中的体系结构模式。
使用不同的函数加载数据并在WebCall之后调用
func loadData(Fromarray dictionary : [String:Any]) {
completed = dictionary["completed"] as? Bool
id = dictionary["id"] as? Int
title = dictionary["title"] as? String
userId = dictionary["userId"] as? Int
}
网络通话结束后通话
Singleton.sharedInstance.loadData(FromArray : YourDictoinary)
和整个项目
let title = Singleton.sharedInstance.title
您需要保留单例类的单个对象。
static let sharedInstance = Singleton()
它将创建您的单例类的对象。
private init() { } or,
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 Singleton {
static let sharedInstance = Singleton()
var emptyStringArray: [String]?
var completed: Bool?
var id: Int?
var title: String?
var userId: Int?
func initializeData(_ dictionary: [String:Any]) {
completed = dictionary["completed"] as? Bool
id = dictionary["id"] as? Int
title = dictionary["title"] as? String
userId = dictionary["userId"] as? Int
}
}
并像这样使用它:
override func viewDidLoad() {
super.viewDidLoad()
// Initialize with data
Singleton.sharedInstance.initializeData(["completed": true, "id": 123, "title": "iOS Title", "userId": 572])
// Access data
let boolData = Singleton.sharedInstance.completed
print(boolData)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.