gpt4 book ai didi

ios - 类似于 Swift 中的回调

转载 作者:行者123 更新时间:2023-11-28 06:58:17 26 4
gpt4 key购买 nike

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

启动 Web 服务运行完美,方法 connectionDidFinishLoading (WebServiceHelper) 获取正确的数据。

现在我想调用一个单独的函数(在本例中是在 LoginViewController 中,稍后在其他 Controller 中),具体取决于哪个函数启动了 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")
}
}

谢谢你的帮助

最佳答案

委托(delegate)是另一种方式,闭包也是首选

关于ios - 类似于 Swift 中的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32744697/

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