【发布时间】:2016-06-06 22:12:41
【问题描述】:
我正在尝试在我的自定义 UIView 中初始化一个 Int 数组:
var graphPoints:[Int]
required init?(coder aDecoder: NSCoder) {
RestApiManager.sharedInstance.requestData() { (json: JSON) in
for item in json[].array! {
let n=item["n"].intValue
print(n)
if(n>=0) {
self.graphPoints.append(n)
}
}
}
super.init(coder: aDecoder)
}
但是在这一行RestApiManager.sharedInstance.requestData() { 我收到了这个错误:'self' used before super.init call
在这一行 super.init(coder: aDecoder) 出现错误:属性 self.graphPoint 未在 super.init 调用时初始化
【问题讨论】:
-
我认为你需要把
super.init(coder: aDecoder)放在你的其他代码之前,我认为第二个问题已经被@user1941284解决了 -
在
init中进行异步网络调用是个坏主意 -
@Paulw11 我把异步网络放在哪里?
-
有很多方法。我可能会创建一个封装服务器 API 的类。它将有一个方法发出请求并通过闭包返回该类的实例。或者由于这是一个 UIView 子类,您可以在
graphPoints上定义一个设置器来更新视图,并在其他地方检索数据。将视图和服务器 API 紧密耦合是一种糟糕的设计