Вопрос для начинающих: Swift: NSMutableURLRequest - PullRequest
0 голосов
/ 03 августа 2020
  • Хотелось бы иметь в моем проекте какие-то простые Stock Data
  • Использование для этого rapidAPI

У меня есть различные ошибки для начинающих, которые я не могу исправить . Некоторая помощь будет оценена. Пытался найти это в Google и прочитать документацию по Apple, но далеко не ушел. Вот часть кода:

import Foundation

struct StockDataManager  {

let headers = [
    "x-rapidapi-host": "yahoo-finance15.p.rapidapi.com",
    "x-rapidapi-key": "MYAPIKEY"
]

let request = NSMutableURLRequest(url: NSURL(string: "https://yahoo-finance15.p.rapidapi.com/api/yahoo/qu/quote/AAPL/financial-data")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
    
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
    

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
    if (error != nil) {
        print(error)
    } else {
        let httpResponse = response as? HTTPURLResponse
        print(httpResponse)
    }
})

dataTask.resume()

}

На этом этапе я получаю следующие ошибки:

request.httpMethod = "GET"
  • Последовательные объявления в строке должны быть разделены ';'
  • Ожидаемое '(' в списке аргументов объявления функции
  • Ожидаемое '{' в теле объявления функции
  • Ожидаемое ключевое слово 'fun c' в объявлении метода экземпляра
  • Ожидаемое объявление
  • Недопустимое повторное объявление 'request ()'

А здесь:

dataTask.resume()
  • Последовательные объявления в строке должны быть разделены символом ';'
  • Expected '(' в списке аргументов объявления функции
  • Expected '{' в теле объявления функции
  • Expected 'fun c' ключевое слово в объявлении метода экземпляра

Я почти уверен, что это базовое c понимание и извиняюсь за этот глупый простой вопрос. Заранее спасибо за попытку помочь.

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Прежде всего, не используйте NSURL и NS(Mutable)URLRequest в Swift. Используйте собственные типы.

Любой пользовательский код должен запускаться внутри функции, например

struct StockDataManager  {
    func loadData(completion: @escaping (Result<Data, Error>) -> Void) {
        let headers = [
            "x-rapidapi-host": "yahoo-finance15.p.rapidapi.com",
            "x-rapidapi-key": "MYAPIKEY"
        ]
        
        var request = URLRequest(url: URL(string: "https://yahoo-finance15.p.rapidapi.com/api/yahoo/qu/quote/AAPL/financial-data")!,
                                          cachePolicy: .useProtocolCachePolicy,
                                          timeoutInterval: 10.0)
        
        request.httpMethod = "GET"
        request.allHTTPHeaderFields = headers
        
        let session = URLSession.shared
        let dataTask = session.dataTask(with: request, completionHandler: { (data, response, error) -> Void in
            if let error = error {
                completion(.failure(error))
            } else {
                let httpResponse = response as? HTTPURLResponse
                print(httpResponse)
                completion(.success(data!))
            }
        })
        dataTask.resume()
    }
}

Функция loadData также нуждается в обработчике завершения для обработки асинхронно полученных данных.

0 голосов
/ 03 августа 2020

У вас не может быть кода (request.httpMethod = "GET"), который не является объявлением непосредственно в структуре. Вставьте его в забаву c, например:

func setRequest() -> NSMutableURLRequest {
    let request = NSMutableURLRequest(
        url: NSURL(string: "https://yahoo-finance15.p.rapidapi.com/api/yahoo/qu/quote/AAPL/financial-data")! as URL,
        cachePolicy: .useProtocolCachePolicy,
        timeoutInterval: 10.0)
    request.httpMethod = "GET"
    request.allHTTPHeaderFields = headers
    
    return request
}
...