有谁知道这可能出什么问题吗?
每次我在模拟器中测试时,请求都会返回值“请输入名称”。
就像 https 请求根本没有发生一样。
import UIKit
class AgeLookUpViewController: UIViewController {
@IBOutlet weak var celebrityTextField: UITextField!
@IBOutlet weak var resultLabel: UILabel!
@IBAction func getAge(_ sender: Any) {
if let url = URL(string: "https://en.wikipedia.org/wiki/" + celebrityTextField.text!.replacingOccurrences(of: " ", with: "_")) {
let request = NSMutableURLRequest(url: url)
let task = URLSession.shared.dataTask(with: request as URLRequest) { data, response, error in
var message = ""
if error != nil {
print(error!)
} else {
if let unwrappedData = data {
let dataString = NSString(data: unwrappedData, encoding: String.Encoding.utf8.rawValue)
var stringSeparator = "<span class=\"noprint ForceAgeToShow\">(age "
if let contentArray = dataString?.components(separatedBy: stringSeparator) {
if contentArray.count > 1 {
stringSeparator = ")</span>"
let newContentArray = contentArray[1].components(separatedBy: stringSeparator)
if newContentArray.count > 1 {
message = newContentArray[1]
print(message)
}
}
}
}
}
if message == "" {
message = "Please Enter a Name"
}
DispatchQueue.main.sync(execute: {
self.resultLabel.text = message
})
}
task.resume()
} else {
resultLabel.text = "Age is unavailable at this time. Please try again later."
}
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
人的年龄应作为结果标签中的结果返回。
最佳答案
检查我更新的代码。我发现请求正常进行并打印响应。 (用 dataString 检查打印语句)。它失败的地方是在响应之后。我收到“未找到年龄内容 2”。
import UIKit
if let url = URL(string: "https://en.wikipedia.org/wiki/Bill_Gates") {
let request = NSMutableURLRequest(url: url)
let task = URLSession.shared.dataTask(with: request as URLRequest) { data, response, error in
var message = ""
if error != nil {
print(error!)
} else {
if let unwrappedData = data {
let dataString = NSString(data: unwrappedData, encoding: String.Encoding.utf8.rawValue)
print(dataString) // checks whether the actual request went through or not.
var stringSeparator = "<span class=\"noprint ForceAgeToShow\">(age "
if let contentArray = dataString?.components(separatedBy: stringSeparator) {
if contentArray.count > 1 {
stringSeparator = ")</span>"
let newContentArray = contentArray[1].components(separatedBy: stringSeparator)
if newContentArray.count > 1 {
message = newContentArray[1]
print(message)
} else {
print("NO age content found 1")
}
} else {
print("NO age content found 2")
}
} else {
print("NO age component found")
}
}
}
if message == "" {
message = "Please Enter a Name"
}
DispatchQueue.main.sync(execute: {
print(message)
})
}
task.resume()
}
就您而言,如果未打印响应,我建议您检查 info.plist 中提供的互联网权限。
查看此链接以获取更多信息。
关于swift - 为什么我无法从此 https 请求接收值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54375135/