在 swift 中向 class 函数添加回调
Adding a callback to a class function in swift
在我的项目中,我创建了一个 public class 来处理我的数据请求(JSON、图像等)的网络接口。 class 中的函数使用 Alamofire 建立网络连接并下载 JSON 文件。
class和函数如下:
import Foundation
import Alamofire
public class DataConnectionManager {
public class func getJSON(AppModule:String, callback:(Int) -> Void) -> Void {
switch(AppModule) {
case "Newsfeed":
Alamofire.request(.GET, "http://some-site.com/api/", encoding: .JSON).responseJSON { (_, _, JSONData, _) in
if JSONData != nil {
jsonHolder.jsonData = JSONData!
print("start")
callback(1)
}
else {
callback(0)
}
}
break
default:
break
}
}
}
我在我的项目中调用函数如下所示:
DataConnectionManager.getJSON("Newsfeed", callback: { (intCheck : Int) -> Void in
if intCheck == 1 {
println("Success")
}
else {
println("Failure")
}
})
该应用程序将无任何错误地启动,但我的健全性检查没有打印出来。事实上,当我这样做时,Alamofire.request 也不会抓取 JSON 提要。
我的方向是否正确?
我让这个工作了,但我不确定具体如何工作。我根据用户建议(添加错误检查等)更改了一些内容,它神奇地开始工作了。这是我更新后的代码,因此人们可以看到如何向他们的函数添加回调。
我的"ConnectionManager":
import Foundation
import Alamofire
public class DataConnectionManager {
public class func getJSON(AppModule:String, callback:(Int) -> Void) -> Void {
switch(AppModule) {
case "Newsfeed":
Alamofire.request(.GET, "http://some-site.com/api/", encoding: .JSON).responseJSON { (_, _, alamoResponse, error) in
if (error != nil){
println("You've got a response error!")
callback(0)
}
else {
if alamoResponse != nil {
jsonHolder.jsonData = alamoResponse!
callback(1)
}
else {
println("You've got some random error")
callback(0)
}
}
}
break
default:
break
}
}
}
我对函数的调用:
DataConnectionManager.getJSON("Newsfeed", callback: { (intCheck : Int) -> Void in
if intCheck == 1 {
self.createTable()
}
else {
println("Failure")
}
})
我正在使用 swift 2.0 + SwiftyJSON,这是我实现它的代码:
class func getJSON(AppModule:String, urlToRequest: String, resultJSON:(JSON) -> Void) -> Void {
var returnResult: JSON = JSON.nullJSON
switch(AppModule) {
case "all":
request(.GET, urlToRequest)
.responseJSON { (_, _, result) in
if (result.isFailure){
print("You've got a response error!")
resultJSON(nil)
}
else {
if (JSON(result.value!) != nil) {
returnResult = JSON(result.value!)
resultJSON(returnResult)
}
else {
print("You've got some random error")
}
}
}
break
default:
break
}
}
并像这样调用函数:
DataManager.getJSON("all",urlToRequest: "myurl.com", resultJSON: { (result: JSON) -> Void in
if (result == nil){
// error with result json == nil
return
}else{
//do something with json result
}
})
希望这对您有所帮助。
在我的项目中,我创建了一个 public class 来处理我的数据请求(JSON、图像等)的网络接口。 class 中的函数使用 Alamofire 建立网络连接并下载 JSON 文件。
class和函数如下:
import Foundation
import Alamofire
public class DataConnectionManager {
public class func getJSON(AppModule:String, callback:(Int) -> Void) -> Void {
switch(AppModule) {
case "Newsfeed":
Alamofire.request(.GET, "http://some-site.com/api/", encoding: .JSON).responseJSON { (_, _, JSONData, _) in
if JSONData != nil {
jsonHolder.jsonData = JSONData!
print("start")
callback(1)
}
else {
callback(0)
}
}
break
default:
break
}
}
}
我在我的项目中调用函数如下所示:
DataConnectionManager.getJSON("Newsfeed", callback: { (intCheck : Int) -> Void in
if intCheck == 1 {
println("Success")
}
else {
println("Failure")
}
})
该应用程序将无任何错误地启动,但我的健全性检查没有打印出来。事实上,当我这样做时,Alamofire.request 也不会抓取 JSON 提要。
我的方向是否正确?
我让这个工作了,但我不确定具体如何工作。我根据用户建议(添加错误检查等)更改了一些内容,它神奇地开始工作了。这是我更新后的代码,因此人们可以看到如何向他们的函数添加回调。
我的"ConnectionManager":
import Foundation
import Alamofire
public class DataConnectionManager {
public class func getJSON(AppModule:String, callback:(Int) -> Void) -> Void {
switch(AppModule) {
case "Newsfeed":
Alamofire.request(.GET, "http://some-site.com/api/", encoding: .JSON).responseJSON { (_, _, alamoResponse, error) in
if (error != nil){
println("You've got a response error!")
callback(0)
}
else {
if alamoResponse != nil {
jsonHolder.jsonData = alamoResponse!
callback(1)
}
else {
println("You've got some random error")
callback(0)
}
}
}
break
default:
break
}
}
}
我对函数的调用:
DataConnectionManager.getJSON("Newsfeed", callback: { (intCheck : Int) -> Void in
if intCheck == 1 {
self.createTable()
}
else {
println("Failure")
}
})
我正在使用 swift 2.0 + SwiftyJSON,这是我实现它的代码:
class func getJSON(AppModule:String, urlToRequest: String, resultJSON:(JSON) -> Void) -> Void {
var returnResult: JSON = JSON.nullJSON
switch(AppModule) {
case "all":
request(.GET, urlToRequest)
.responseJSON { (_, _, result) in
if (result.isFailure){
print("You've got a response error!")
resultJSON(nil)
}
else {
if (JSON(result.value!) != nil) {
returnResult = JSON(result.value!)
resultJSON(returnResult)
}
else {
print("You've got some random error")
}
}
}
break
default:
break
}
}
并像这样调用函数:
DataManager.getJSON("all",urlToRequest: "myurl.com", resultJSON: { (result: JSON) -> Void in
if (result == nil){
// error with result json == nil
return
}else{
//do something with json result
}
})
希望这对您有所帮助。