Я начал мигрировать свой старый код SOAP Web Service цели с помощью Swift 2. Но мне не удалось, так как я никогда не получал ответа с помощью Swift 2, который заставлял меня гать в конце.Swift 2 SOAP Web Service Call
Я начал изолировать вещи и после этого учебника по преобразователю температуры мыла (http://webindream.com/soap-with-swift/), который основан на Swift 1.2.
Это мой преобразованный ViewController Swift 2, но connection
никогда не был прав (connection == true
никогда не происходило).
//
// ViewController.swift
// Temperature Converter
//
// Created by Farhad on 10/24/14.
// Copyright (c) 2014 Web In Dream. All rights reserved.
//
import UIKit
//Step 1: Add protocol names that we will be delegating.
class ViewController: UIViewController, UITextFieldDelegate, NSURLConnectionDelegate, NSXMLParserDelegate {
var mutableData:NSMutableData = NSMutableData()
var currentElementName:NSString = ""
@IBOutlet var txtCelsius : UITextField!
@IBOutlet var txtFahrenheit : UITextField!
@IBAction func actionConvert(sender : AnyObject) {
let celcius = txtCelsius.text
let soapMessage = "<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><CelsiusToFahrenheit xmlns='http://www.w3schools.com/webservices/'><Celsius>\(celcius)</Celsius></CelsiusToFahrenheit></soap:Body></soap:Envelope>"
let urlString = "http://www.w3schools.com/webservices/tempconvert.asmx"
let url = NSURL(string: urlString)
let theRequest = NSMutableURLRequest(URL: url!)
let msgLength = String(soapMessage.characters.count)
theRequest.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
theRequest.addValue(msgLength, forHTTPHeaderField: "Content-Length")
theRequest.HTTPMethod = "POST"
theRequest.HTTPBody = soapMessage.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) // or false
let connection = NSURLConnection(request: theRequest, delegate: self, startImmediately: true)
connection!.start()
if (connection == true) {
var mutableData : NSMutableData = NSMutableData()
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// NSURLConnectionDelegate
// NSURL
func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
mutableData.length = 0;
}
func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
mutableData.appendData(data)
}
func connectionDidFinishLoading(connection: NSURLConnection!) {
let xmlParser = NSXMLParser(data: mutableData)
xmlParser.delegate = self
xmlParser.parse()
xmlParser.shouldResolveExternalEntities = true
}
// NSXMLParserDelegate
func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
currentElementName = elementName
}
func parser(parser: NSXMLParser!, foundCharacters string: String!) {
if currentElementName == "CelsiusToFahrenheitResult" {
txtFahrenheit.text = string
}
}
}
Там было много коментарии вокруг в Интернете, но не реальный ответ, почему связь никогда не становится истинным с Swift 2. По крайней мере, никто не решить мою проблему, наконец ;-(
Вот почему я поднять этот вопрос еще раз с надеждой получить рабочую версию для сообщества. есть ли кто-то там сделал успешную Swift 2.1 SOAP веб-службы вызова и может разделить решение?
Большое спасибо заранее Джон
Привет, я работаю над мылом, и мне тоже нужно было обновить, нашли ли вы решение? –
Привет @ B.Benj, решение опубликовано, как только я исправил, что @HoaParis упомянул, что 'NSUrlConnection' не является логическим, поэтому я изменил его на' if (connection! = Nil) ... '. Поэтому надеюсь, что это тоже поможет. Cheers, John –
Спасибо, но теперь у меня другая проблема, перейдя на Swift2, он не принимает IP :(Спасибо –