Я пытаюсь получить данные из базы данных Localhost.Я использую MAMP на своем Mac и создал веб-сервер.Я сделал скрипт php, и когда я получаю к нему доступ через браузер, он возвращает данные.Проблема возникает в моем коде Swift, который должен взять данные из сеанса URL и проанализировать их.В функции downloadItems () ниже переменные data и error возвращают значения nil, но переменная response возвращает данные, указывающие на работоспособность соединения.Я ожидаю, что переменная data будет иметь данные, которые мой php получает из моей базы данных.
import Foundation
protocol FeedModelProtocol: class {
func itemsDownloaded(items: NSArray)
}
class FeedModel: NSObject, URLSessionDataDelegate {
weak var delegate: FeedModelProtocol!
let urlPath = "http://x*//MyWebService/api/Get_Data2.php" //Change to the web address of your stock_service.php file
func downloadItems() {
let url: URL = URL(string: urlPath)!
let defaultSession = Foundation.URLSession(configuration: URLSessionConfiguration.default)
let task = defaultSession.dataTask(with: url) { (data, response, error) in
if error != nil {
print("Error")
}else {
print("stocks downloaded")
print(error!)
print(data!)
print(response!)
self.parseJSON(data!)
}
}
task.resume()
}
func parseJSON(_ data:Data) {
var jsonResult = NSArray()
do{
jsonResult = try JSONSerialization.jsonObject(with: data, options:JSONSerialization.ReadingOptions.allowFragments) as! NSArray
} catch let error as NSError {
print(error)
}
var jsonElement = NSDictionary()
let stocks = NSMutableArray()
for i in 0 ..< jsonResult.count {
jsonElement = jsonResult[i] as! NSDictionary
let stock = StockModel()
//the following insures none of the JsonElement values are nil through optional binding
if let name = jsonElement["name"] as? String,
let price = jsonElement["price"] as? String {
print(name)
print(price)
stock.name = name
stock.price = price
}
stocks.add(stock)
}
DispatchQueue.main.async(execute: { () -> Void in
self.delegate.itemsDownloaded(items: stocks)
})
}
}