json - 外部访问该类时,Collection 为空
问题描述
我创建了一个类 (Cards),它包含一个名为 tWelcomeItem 的类的集合。SendRequest 函数将 JSON 解码为 tWelcomeItem(来自 Trello API 请求的卡片)。
当 Cards 类中的 SendRequest 函数运行时,它会打印集合中项目的最后一个索引(16 个项目)。这是意料之中的。
但是,当我从 Storyboard 的视图控制器访问该集合时,它会打印 0 个项目。
为什么当从 View Controller 访问它的实例时集合是空的?
视图控制器- 打印集合中的零个项目。
private var dm:Cards = Cards(id:"trelloCardID")
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print("* viewDidLoad() *")
print("Total Collection Items: " + String(dm.CardCollection.endIndex))
DataView.dataSource = self
DataView.delegate = self
print("* // viewDidLoad() *")
}
Cards Class - 打印行返回 16 个项目。
public class Cards {
var CardCollection = [tWelcomeElement]()
var BoardID:String = ""
var uri:String = ""
let Manager:TrelloHelper = TrelloHelper()
init(id:String) {
SendRequest(BoardID: id)
}
public func SendRequest (BoardID:String) {
// SET CLASS PROPERTIES
self.BoardID = BoardID
self.uri = "/1/boards/\(self.BoardID)/cards"
// BUILD HTTP REQUEST
let request:URLRequest = Manager.BuildURL(uri: self.uri, params: "")
// PERFORM HTTP REQUEST
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
// CHECK FOR ERRORS
if let error = error {
print("Error took place \(error)")
return
}
// Convert HTTP Response Data to a String
if let data = data, let _ = String(data: data, encoding: .utf8) {
do {
self.CardCollection = try JSONDecoder().decode([tWelcomeElement].self, from: data )
print("Total Collection Items:" + String(self.CardCollection.endIndex))
} catch {
print("Error during JSON serialization: \(error.localizedDescription)")
}
} // END-IF
} // END-LET
task.resume()
} // END-FUNCTION
}
解决方案
URLSession
对象异步发出请求。当您初始化对象并viewDidLoad
打印其 collectionView 的最后一个索引时,您的网络调用应该已经开始,但它不太可能已经完成,因此您看到endIndex
0 的原因。
推荐阅读
- unity3d - Blender Cube 到 Unity 3D 地形
- performance - 用于静态和动态内容的 IIS 网站
- mysql - 按列值的差异排序
- ios - 架构 armv7 的 4 个重复符号
- laravel - 我可以如何处理剑道调度程序中的服务器端错误?
- android - 在 setOnScrollChangeListener 中无法检测到滚动何时停止
- python - Golang中Python的“id”函数相当于什么?
- python - 使用 R 或 python 将列拆分为多列
- c++ - 指针大小(*variable VS 变量)
- mysql - MySQL根据第一列对第二列和第三列进行排序