gpt4 book ai didi

ios - 在SWIFT 2.0中制作可重用的JSON URL获取功能

转载 作者:行者123 更新时间:2023-11-29 01:26:35 25 4
gpt4 key购买 nike

我遇到了一个问题。我想这都是我基础薄弱造成的。我确信有人可以轻松帮助我并引导我走向正确的方向。

我有不同的 segues,并且都通过远程 URL 从 JSON 获取数据。所以简而言之,所有的 segues 都需要打开 URL 并解析 JSON 并将它们变成一个 ARRAY

我已经完成了第一个 segue,并且运行良好。现在我计划使用它下载 JSON 并将其转换为 ARRAY 作为通用函数的函数

我在 stackoverflow 的另一个页面上读到,我可以在 ViewController 类之外声明所有常用函数

我希望到目前为止每个人都和我在一起。

现在我在 ViewController 中声明一个函数

getDataFromJson(url: String)

该函数代码如下所示

func getJsonFromURL(url: String)
{
// some class specific tasks

// call the common function with URL
// get an array
let arrJSON = getJsonArrFromURL(url)

for element in arrJSON
{
// assign each element in json to ur table
print("Element: \(element)")
}

// some class specific tasks
}

这将调用在类的分数之外声明的公共(public)函数

getArrFromJson(url: String) -> NSArray

这个通用函数非常通用。获取一个 URL,调用它,打开它,将其数据解析为 ARRAY 并将其返回。

我卡住的问题是把返回放在哪里它返回空数组,因为任务没有完成,我很无能

func getJsonArrFromURL(var url: String) -> NSArray
{
var parseJSON : NSArray?

if ( url == "" )
{
url = self.baseURLHomepage
}
print("Opening a JSON URL \(url)")

let myUrl = NSURL(string: url);
let request = NSMutableURLRequest(URL:myUrl!);

request.HTTPMethod = "GET";

let postString = "";
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);

let task = NSURLSession.sharedSession().dataTaskWithRequest(request)
{
data, response, error in

if ( error != nil )
{
print("Error open JSON url \n\(error)")
return
}

do
{
parseJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSArray
}
catch
{
self.showAlert("Error", msg: "Error occurred while trying to process the product information data")


print("Error occured in JSON = \(error)")
}
}
task.resume()
return parseJSON!

}

最佳答案

您可能可以在您的任何类中添加如下所示的方法

func post(url: String, info: String, completionHandler: (NSString?, NSError?) -> ()) -> NSURLSessionTask {
let URL = NSURL(string: url)!
let request = NSMutableURLRequest(URL:URL)
request.HTTPMethod = "GET"
let bodyData = info
request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding);

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
dispatch_async(dispatch_get_main_queue()) {
guard data != nil else {
print("response String is nil")
completionHandler(nil, error)
return
}
if let dataNew = data {
completionHandler(NSString(data: (NSData(base64EncodedData: dataNew, options: NSDataBase64DecodingOptions([])))!, encoding: NSASCIIStringEncoding), nil)
}
}
}
task.resume()

return task
}

并在任何地方访问它

    let url = "your URL String"
let info = "The data you would like to pass"
yourClassName.post(url, info: info) { responseString, error in
guard responseString != nil else {
print("response String is nil")
print(error)
return
}
do {
if !(responseString as? String)!.isEmpty {
let json = try NSJSONSerialization.JSONObjectWithData((responseString as! String).data, options: NSJSONReadingOptions.init(rawValue: 0))
//process your json here
}
} catch {
print("Error\n \(error)")
return
}
}

像下面这样扩展你的字符串

extension String {
var data:NSData! {
return dataUsingEncoding(NSUTF8StringEncoding)
}
}

关于ios - 在SWIFT 2.0中制作可重用的JSON URL获取功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33933723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com