我将进行登录,并且职位要求在函数中。
在if语句if dict!["Authorized"] as AnyObject? === true as AnyObject
中,如果授权为true,我想返回。
但是要返回时的错误是Unexpected non-void return value in void function
我试图将func声明为Bool或任何其他类似-> Bool
的语句。
但这不起作用。
这是我的代码。
func Login(Benutzer: String, Password: String) {
var request = URLRequest(url: URL(string: "http://mydomain/ajax/login.php")!)
request.httpMethod = "POST"
let postString = "Benutzername=\(String(describing: Benutzer))&Password=\(String(describing: Password))"
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else { // check for fundamental networking error
print("error=\(String(describing: error))")
DispatchQueue.main.async {
if error as AnyObject? === "The Internet is Down" as AnyObject {
}
else {
let alert = UIAlertController(title: "Error", message: "You have to turn on your Internet or Server is Down ", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.present(alert, animated: true)
}
}
return
}
if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(String(describing: response))")
}
let responseString = String(data: data, encoding: .utf8)
print("responseString = \(String(describing: responseString))")
func convertToDictionary(text: String) -> [String: Any]? {
if let data = text.data(using: .utf8) {
do {
return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
} catch {
print(error.localizedDescription)
}
}
return nil
}
let dict = convertToDictionary(text: responseString!)
DispatchQueue.main.async {
if dict!["Authorized"] as AnyObject? === true as AnyObject {
return true
// error is here
}
else {
let alert = UIAlertController(title: "Error", message: dict!["Message"] as? String, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.present(alert, animated: true)
}
}
}
task.resume()
}
@IBAction func loginTapped(_ sender: Any) {
let Benutzer = benutzernameTextField.text;
let Password = passwordTextField.text;
if benutzernameTextField.text == Benutzer && passwordTextField.text == Password {
}
}
}
答案 0 :(得分:0)
问题是,在函数的某一点上您只有return
,而在函数的另一点上您只有return true
。 Swift是强类型的,函数始终必须返回相同的类型-在一种情况下不能返回布尔值,在另一种情况下不能返回布尔值。您可能想做的就是将第一个return
更改为return false
,然后将-> Bool
添加到函数的签名中。另一种选择是返回可选的布尔值(-> Bool?),在第一种情况下返回nil。另外,作为一个旁注,您可能希望小写“登录”中的“ L”,这只是惯例。
func Login(Benutzer: String, Password: String) -> Bool {
var request = URLRequest(url: URL(string: "http://mydomain/ajax/login.php")!)
request.httpMethod = "POST"
let postString = "Benutzername=\(String(describing: Benutzer))&Password=\(String(describing: Password))"
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else { // check for fundamental networking error
print("error=\(String(describing: error))")
DispatchQueue.main.async {
if error as AnyObject? === "The Internet is Down" as AnyObject {
}
else {
let alert = UIAlertController(title: "Error", message: "You have to turn on your Internet or Server is Down ", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.present(alert, animated: true)
}
}
return false
}
if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(String(describing: response))")
}
let responseString = String(data: data, encoding: .utf8)
print("responseString = \(String(describing: responseString))")
func convertToDictionary(text: String) -> [String: Any]? {
if let data = text.data(using: .utf8) {
do {
return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
} catch {
print(error.localizedDescription)
}
}
return nil
}
let dict = convertToDictionary(text: responseString!)
DispatchQueue.main.async {
if dict!["Authorized"] as AnyObject? === true as AnyObject {
return true
}
else {
let alert = UIAlertController(title: "Error", message: dict!["Message"] as? String, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.present(alert, animated: true)
}
}
}
task.resume()
}
@IBAction func loginTapped(_ sender: Any) {
let Benutzer = benutzernameTextField.text;
let Password = passwordTextField.text;
if benutzernameTextField.text == Benutzer && passwordTextField.text == Password {
}
}
}