【问题标题】:Beginners Question: Swift: NSMutableURLRequest初学者问题:Swift:NSMutableURLRequest
【发布时间】:2020-11-23 11:36:45
【问题描述】:
  • 希望在我的项目中包含一些简单的股票数据
  • 为此使用 rapidAPI

我有各种初学者错误,我无法解决。一些帮助将不胜感激。试图用谷歌搜索它并阅读苹果文档,但没有走远。这是代码部分:

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"
  • 一行中的连续声明必须用';'分隔
  • 函数声明的参数列表中应为 '('
  • 函数声明体中应为“{”
  • 实例方法声明中应包含“func”关键字
  • 预期声明
  • “request()”的重新声明无效

这里:

dataTask.resume()
  • 一行中的连续声明必须用';'分隔
  • 函数声明的参数列表中应为 '('
  • 函数声明体中应为“{”
  • 实例方法声明中应包含“func”关键字

我很确定这是基本的理解,对于这个愚蠢的简单问题感到抱歉。提前感谢您的帮助。

【问题讨论】:

    标签: swift nsurl nsmutableurlrequest


    【解决方案1】:

    首先,不要在 Swift 中使用 NSURLNS(Mutable)URLRequest。使用原生类型。

    例如,任何自定义代码都必须在函数内部运行

    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 函数还需要一个完成处理程序来处理异步接收的数据。

    【讨论】:

    • 顺便说一句,非常感谢您的帮助。对不起,愚蠢的问题。
    【解决方案2】:

    你不能有代码 (request.httpMethod = "GET") 不是直接在结构中的声明。 将其嵌入到函数中,如下所示:

    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
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-04
      • 2015-03-16
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多