var serviceTypeName = [String]()
override func viewDidLoad() {
super.viewDidLoad()
getServiceType()
debugPrint(serviceTypeName)
}
我尝试从Web API获取一个名称数组,并将其存储在数组serviceTypeName
中。以下是我获取服务名称的函数(我使用了 Alamorfire lib)
func getServiceType() {
Alamofire.request(...
.responseJSON { response in
switch response.result {
case .success:
if let responseValue = response.result.value {
var serviceName: [String] = []
let json = JSON(responseValue)
for (key, subJson):(String, JSON) in json["results"] {
if let name = subJson["name"].string {
serviceName.insert(name, at: Int(key)!)
}
}
self.serviceTypeName = serviceName
} ...
但是,我在这个函数之后得到了空数组< code>[],就像函数什么都没做一样。我确保我从服务器获得了正确的数据,并在每个循环中正确地输入到< code>serviceName中。但我不能将其设置为< code>serviceTypeName。请你指出错误好吗?
Alamofire请求是异步的。这意味着< code>getServiceType()中的代码将与< code>viewDidLoad()函数中的其余代码分开运行。
调用debugPrint(serviceTypeName)
时,getServiceType()函数尚未完成处理。
解决这个问题的方法是向< code>getServiceType()
函数添加completionHandler:
func getServiceType(completionHandler: () -> ()) {
Alamofire.request(...
.responseJSON { response in
switch response.result {
case .success:
if let responseValue = response.result.value {
var serviceName: [String] = []
let json = JSON(responseValue)
for (key, subJson):(String, JSON) in json["results"] {
if let name = subJson["name"].string {
serviceName.insert(name, at: Int(key)!)
}
}
self.serviceTypeName = serviceName
completionHandler()
} ...
然后你可以这样称呼这个函数:
override func viewDidLoad() {
super.viewDidLoad()
getServiceType() {
debugPrint(serviceTypeName)
}
}
在这里,当完成处理程序由异步函数触发时,将在正确的时间调用调试打印。:)
在这个函数之后,我得到了一个空数组<code>〔〕,就像这个函数没有做任何事情一样。
没错,函数什么都没做。更准确地说,函数还没有做任何事情。在函数之后检查值是不成熟的,因为回调是在数据到达时异步执行的。
您需要将代码拆分为两部分:
一旦回调完成设置属性,它需要启动对第二部分的调用,该部分利用了这些属性。
func getServiceType() { // Part 1
...
self.serviceTypeName = serviceName
dispatch_async(dispatch_get_main_queue()) {
processServiceName()
}
}
func processServiceName() { // Part 2
... // Do things with self.serviceTypeName
}
LoginSignupActivity.java-- profileActivity.java-- 当我访问ProfileActivity.java内部的id时,它显示空值。我想访问在LoginSignupActivity.java中获得的值。
A类源代码: B类源代码: 当我编译B. java时没有错误,当我试图编译A. java时,我得到了: 顺便说一句,我不是用IDE来编译这个,我只是用Geany和nano编辑了文件,然后用javac从终端编译它们。
当我尝试编译代码时,这个错误一直显示
我在更改联系人对象中的变量值时遇到问题。我正在尝试制作一个联系人列表,但我无法更改变量trach方法的值。我有editTouch方法调用change eName方法,这两个方法都传递了ArrayList对象trach引用,所以它不应该在main方法中更改值trach ArrayList时出现问题,但问题是当我想更改对象的名称时它不会更改它。我这里缺少什么吗?
问题内容: 我遇到了一个奇怪的问题,我无法弄清楚在尝试插入程序时弹出的问题。另一个问题是我无法创建一个简单的测试用例,因为每次尝试都可以。我一定缺少一些并发症。但我会尽力清楚地描述这种情况,以防任何人熟悉。 我有一个称为Seed的基类,它是主应用程序的一部分,并由系统类加载器加载。我有一个包含Road类的插件,该类是Seed的子类。它是在运行时从单独的jar文件加载的。Road类引用字段Seed.
问题内容: 有没有办法修改闭包内部变量之一的绑定值?查看示例以更好地理解它。 问题答案: 我认为在Python中没有任何方法可以做到这一点。定义闭包后,将捕获封闭范围内变量的当前状态,并且不再具有可直接引用的名称(从闭包外部)。如果要再次调用,则新的闭包将具有与封闭范围不同的变量集。 在简单的示例中,使用类可能会更好: 如果您确实使用了这种技术,我将不再使用该名称,因为它实际上不再是一个闭包。但是