Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift与基于SOAP的web服务_Ios_Swift_Web Services_Soap - Fatal编程技术网

Ios Swift与基于SOAP的web服务

Ios Swift与基于SOAP的web服务,ios,swift,web-services,soap,Ios,Swift,Web Services,Soap,我只是从swift开始为IOS编程。我已经为Android开发了一个应用程序,它使用了一些web服务。我需要做同样的应用程序,但现在是IOS。 我已经可以正确调用web服务并打印响应,但是我需要访问web服务返回的属性。啊,我有各种web服务,其中一些返回字符串数组。这是我用来调用服务的代码 var lobj_Request = NSMutableURLRequest(URL: NSURL(string: URLString)!) var session = NSURLSession.s

我只是从swift开始为IOS编程。我已经为Android开发了一个应用程序,它使用了一些web服务。我需要做同样的应用程序,但现在是IOS。 我已经可以正确调用web服务并打印响应,但是我需要访问web服务返回的属性。啊,我有各种web服务,其中一些返回字符串数组。这是我用来调用服务的代码

var lobj_Request = NSMutableURLRequest(URL: NSURL(string: URLString)!)
    var session = NSURLSession.sharedSession()
    var err: NSError?
    var user = nameTextField.text
    var pass = passTextField.text
    lobj_Request.HTTPMethod = "POST"
    lobj_Request.HTTPBody = soapMessage.dataUsingEncoding(NSUTF8StringEncoding)
    lobj_Request.addValue(hostString, forHTTPHeaderField: "Host")
    lobj_Request.addValue("application/soap+xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
    lobj_Request.addValue(String(soapMessage.characters.count), forHTTPHeaderField: "Content-Length")
    lobj_Request.addValue(SOAP_ACTION, forHTTPHeaderField: "SOAPAction")
    var task = session.dataTaskWithRequest(lobj_Request, completionHandler: {data, response, error -> Void in
        print("Response: \(response)")
        var strData = NSString(data: data!, encoding: NSUTF8StringEncoding)
        print("Body: \(strData)")

        if error != nil
        {
            print("Error: " + error!.description)
        }

    })
    task.resume()

我知道属性在数据中(显然),但我不知道如何访问它们。

如果您的web服务返回带有JSON的字符串,您将需要解析它。 请考虑:

如果是XML字符串:


我指的是“strData”。

我找到了一个很好的库来解决这个问题。它叫SWXMLHash。 我只是这样做了:

var lobj_Request = NSMutableURLRequest(URL: NSURL(string: URLString)!)
var session = NSURLSession.sharedSession()
var err: NSError?
var user = nameTextField.text
var pass = passTextField.text
lobj_Request.HTTPMethod = "POST"
lobj_Request.HTTPBody = soapMessage.dataUsingEncoding(NSUTF8StringEncoding)
lobj_Request.addValue(hostString, forHTTPHeaderField: "Host")
lobj_Request.addValue("application/soap+xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
lobj_Request.addValue(String(soapMessage.characters.count), forHTTPHeaderField: "Content-Length")
lobj_Request.addValue(SOAP_ACTION, forHTTPHeaderField: "SOAPAction")
var task = session.dataTaskWithRequest(lobj_Request, completionHandler: {data, response, error -> Void in
    print("Response: \(response)")
    var strData = NSString(data: data!, encoding: NSUTF8StringEncoding)
    print("Body: \(strData)")

    var xml = SWXMLHash.parse(data!)

    var propertyIwant = xml["soap:Envelope"]["soap:Body"]["SoapResponse"]["SomeField"]["propertyIwant"].element?.text

    if error != nil
    {
        print("Error: " + error!.description)
    }

})
task.resume()

Swift 2.0不适合我。但我发现了一个非常好的库。很高兴SWXMLHash能够提供帮助——实际上我最初编写它是因为我必须在iOS应用程序中解析SOAP!