Swift:尝试查询 api 时得到 nil

Posted

技术标签:

【中文标题】Swift:尝试查询 api 时得到 nil【英文标题】:Swift: Getting nil when trying to query api 【发布时间】:2016-10-11 18:11:34 【问题描述】:

我无法从 api 获取股票价格。我正在使用 SwiftyJSON 框架来接收数据。当我执行代码时,它在控制台中给我 nil 。我不知何故找不到错误。

import UIKit

class ViewController: UIViewController

@IBOutlet weak var inputQuote: UITextField!

@IBAction func buttonTapped(sender: AnyObject)

    var stockQuote = inputQuote.text
    getJSON(stockQuote!)


override func viewDidLoad()

    super.viewDidLoad()


func getJSON(quote: String)


    let markitOnDemandURL = "http://dev.markitondemand.com/MODApis/Api/v2/Quote/jsonp?symbol=" + quote.uppercaseString + "&callback=myFunction"

    let url = NSURL(string: markitOnDemandURL)
    let request = NSURLRequest(URL: url!)
    let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
    let task = session.dataTaskWithRequest(request) (data, response, error) -> Void in

        if error == nil 

            let swiftyJSON = JSON(data: data!)
            let stockPrice = swiftyJSON["LastPrice"].stringValue
            print(stockPrice)
        

        else
        
            print("error")
        
    
    task.resume()

这是我正在使用的 api:http://dev.markitondemand.com/MODApis/Api/v2/Quote/jsonp?symbol=AAPL&callback=myFunction

如果您可以查看我的代码并帮助我解决此问题,那就太好了。感谢您的努力。

【问题讨论】:

我认为这个 API 不会产生有效的 json。检查邮递员。无效的json 能否提供源代码?我不知道如何解决这个问题。 【参考方案1】:

目前你从这个 api 得到的结果是

myFunction("Status":"SUCCESS","Name":"Apple Inc","Symbol":"AAPL","LastPrice":116.05,"Change":1.98999999999999,"ChangePercent":1.74469577415395,"Timestamp":"Mon Oct 10 00:00:00 UTC-04:00 2016","MSDate":42653,"MarketCap":625328810150,"Volume":36235956,"ChangeYTD":105.26,"ChangePercentYTD":10.2508075242257,"High":116.75,"Low":114.72,"Open":115.02)

这是一个无效的 JSON

从开头删除 myFunction( 并在末尾删除 ) 将使其成为有效的 json


  "Status": "SUCCESS",
  "Name": "Apple Inc",
  "Symbol": "AAPL",
  "LastPrice": 116.05,
  "Change": 1.98999999999999,
  "ChangePercent": 1.74469577415395,
  "Timestamp": "Mon Oct 10 00:00:00 UTC-04:00 2016",
  "MSDate": 42653,
  "MarketCap": 625328810150,
  "Volume": 36235956,
  "ChangeYTD": 105.26,
  "ChangePercentYTD": 10.2508075242257,
  "High": 116.75,
  "Low": 114.72,
  "Open": 115.02

您可以使用 POSTMAN 等各种工具或 http://jsonviewer.stack.hu/ 和 http://jsonlint.com/ 等链接来验证您的 JSON。

【讨论】:

以上是关于Swift:尝试查询 api 时得到 nil的主要内容,如果未能解决你的问题,请参考以下文章

Swift 在尝试从存在的键中获取值时得到 Nil [关闭]

当我尝试重新加载日期时,Swift 5 TableView 在 ViewController 中发现 nil

Swift 5 API 调用数据变量 nil 但 API 证明有效

在展开可选值 uint32 swift 时意外发现 nil

Swift 在尝试向上移动布局时打开可选值时意外发现 nil

尝试访问 TabBar 时 IOS swift 致命错误 nil 异常