【问题标题】:Something like Callback in Swift类似于 Swift 中的回调
【发布时间】:2015-09-23 16:21:16
【问题描述】:

我用 Swift 编写的 Web 服务有问题。

启动 web 服务运行完美,方法 connectionDidFinishLoading (WebServiceHelper) 得到正确的数据。

现在我想调用一个单独的函数(在本例中是 LoginViewController,稍后在其他控制器中),具体取决于哪个函数启动了 Web 服务。

在 JavaScript 中我会使用回调,但在 Swift 文档中找不到类似的东西。

class WebServiceHelper: NSObject, NSURLConnectionDelegate, NSXMLParserDelegate {

var mutableData:NSMutableData = NSMutableData()
var sourceClass:String = ""
var lastUsedService:String = ""

func startWebServiceActivity(xmlMessage:String, method:String, service:String) {
    let text: String = xmlMessage
    let wsUrl: String = "https://.../webservice/soap/server.php"
    let soapMessage:String = text
    let url = NSURL(string: wsUrl)
    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()
}

func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
    mutableData.length = 0;
}

func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
    mutableData.appendData(data)
}

// Parse the result right after loading
func connectionDidFinishLoading(connection: NSURLConnection!) {
    //print(mutableData)

    let datastring = String(data: mutableData, encoding: NSUTF8StringEncoding)
    //print(datastring)

    let result = XMLParser.sharedParser.decode(datastring!)
    print(result)

}
}

class LoginViewController: UIViewController {

//MARK: IBOutlets
@IBOutlet weak var usernameTextfield: UITextField!
@IBOutlet weak var passwordTextfield: UITextField!
@IBOutlet weak var autoLoginSwitch: UISwitch!

//MARK: Properties
var soapMethod:String = "login"
var username:String = ""
var password:String = ""
let soapMessages:SOAPMessages = SOAPMessages()

//MARK: Functions
override func viewDidLoad() {
    super.viewDidLoad()

    let backButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: navigationController, action: nil)
    navigationItem.leftBarButtonItem = backButton

}

//MARK: IBActions

@IBAction func confirmButton(sender: UIButton) {
    username = usernameTextfield.text!
    password = passwordTextfield.text!

    let loginXML:String = soapMessages.getLoginXML(username, password: password)

    WebServiceHelper().startWebServiceActivity(loginXML,method: soapMethod, service:"login")
}
}

感谢您的帮助

【问题讨论】:

标签: ios swift web-services soap callback


【解决方案1】:

委托是另一种实现方式,但也首选闭包

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    相关资源
    最近更新 更多