0

我正在尝试学习如何将 swiftHTTP 与事故 api ( https://www.mashape.com/textanalysis/textanalysis ) 一起使用。到目前为止,这是我的代码,

import SwiftHTTP

    func splitSentenceIntoWordsUsingTextAnalysis (string: String) -> String {
    var request = HTTPTask()
    var params = ["text": "这是中文测试"] //: Dictionary<String,AnyObject>
    //request.requestSerializer = JSONRequestSerializer()
    request.requestSerializer.headers["X-Mashape-Key"] = "My-API-Key"
    request.requestSerializer.headers["Content-Type"] = "application/x-www-form-urlencoded"
    request.responseSerializer = JSONResponseSerializer()
    request.POST("https://textanalysis.p.mashape.com/segmenter", parameters: params, success: {(response: HTTPResponse) in if let json: AnyObject = response.responseObject { println("\(json)") } },failure: {(error: NSError, response: HTTPResponse?) in println("\(error)") })

// {
// result = "\U4f60 \U53eb \U4ec0\U4e48 \U540d\U5b57";
// }

return ?? // I want to return the "result" in the json as a string.

}

如何将 json 中的“结果”作为字符串返回?

4

2 回答 2

2

SwiftHTTP 和 NSURLSession 一样,在设计上是异步的。这意味着您不能只从该方法返回。

import SwiftHTTP

func splitSentenceIntoWordsUsingTextAnalysis (string: String, finished:((String) -> Void)) {
    var request = HTTPTask()
    var params = ["text": "这是中文测试"] //: Dictionary<String,AnyObject>
    //request.requestSerializer = JSONRequestSerializer()
    request.requestSerializer.headers["X-Mashape-Key"] = "My-API-Key"
    request.requestSerializer.headers["Content-Type"] = "application/x-www-form-urlencoded"
    request.responseSerializer = JSONResponseSerializer()
    request.POST("https://textanalysis.p.mashape.com/segmenter", parameters: params, success: {
        (response: HTTPResponse) in
        if let res: AnyObject = response.responseObject {
            // decode res as string.
            let resString = res as String
            finished(resString)
        }
        }, failure: {(error: NSError, response: HTTPResponse?) in
            println(" error \(error)")
    })
}

然后你会像这样使用它。

splitSentenceIntoWordsUsingTextAnalysis("textToSplit", {(str:String) in
    println(str)
    // do stuff with str here.
})

另请参阅此 Github 问题。

https://github.com/daltoniam/SwiftHTTP/issues/30

于 2015-01-02T08:02:21.460 回答
0

在这段代码中,我发出了一个 HTTP 请求并从我的示例 php 文件中获取 JSON 数据:

        // Making the HTTP request

        var post:NSString = "data=\(data)"

        NSLog("PostData: %@",post)

        var url:NSURL = NSURL(string: "http://domain.com/jsontest.php")!

        var postData:NSData = post.dataUsingEncoding(NSASCIIStringEncoding)!

        var postLength:NSString = String( postData.length )

        var request:NSMutableURLRequest = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "POST"
        request.HTTPBody = postData
        request.setValue(postLength, forHTTPHeaderField: "Content-Length")
        request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
        request.setValue("application/json", forHTTPHeaderField: "Accept")


        var reponseError: NSError?
        var response: NSURLResponse?

        var urlData: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&reponseError)

        if ( urlData != nil ) {
            let res = response as NSHTTPURLResponse!

            NSLog("Response code: %ld", res.statusCode)

            if (res.statusCode >= 200 && res.statusCode < 300)
            {
                var responseData:NSString  = NSString(data:urlData!, encoding:NSUTF8StringEncoding)!

                NSLog("Response ==> %@", responseData)

                var error: NSError?


                // Here i make the JSON dictionary

                let jsonData:NSDictionary = NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &error) as NSDictionary

                // Like this you can access the values of the JSON dictionary as string

                name.text = jsonData.valueForKey("name") as NSString
                last.text = jsonData.valueForKey("last") as NSString

            }
        }

希望能帮助到你 :)

于 2014-12-31T21:27:37.630 回答