【问题标题】:Swfit 2 "Extra argument 'error' in call"Swift 2“调用中的额外参数'错误'”
【发布时间】:2015-11-02 03:56:55
【问题描述】:

当 xcode 给我它一直指向的“调用中的额外参数'错误'”时,我一直无法理解 xcode 想要从我这里得到什么

if let feed = NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: nil) as? NSDictionary,

我在某处读到,在 swift 2 中我应该添加 do {,但每次添加它时,我都会不断破坏更多内容。 swift 2中的正确语法是什么?

这是代码:

override func viewDidLoad() {
    super.viewDidLoad()
    let request = NSURLRequest(URL: NSURL(string: feedURL)!)
    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { response, data, error in
        if let feed = NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: nil) as? NSDictionary,
            title = feed.valueForKeyPath("feed.entry.im:name.label") as? String,
            artist = feed.valueForKeyPath("feed.entry.im:artist.label") as? String,
            imageURLs = feed.valueForKeyPath("feed.entry.im:image") as? [NSDictionary] {
                if let imageURL = imageURLs.last,
                    imageURLString = imageURL.valueForKeyPath("label") as? String {
                        self.loadImageFromURL(NSURL(string:imageURLString)!)
                }
            self.titleLabel.text = title
            self.titleLabel.hidden = false
            self.artistLabel.text = artist
            self.artistLabel.hidden = false

        }
    }
}

【问题讨论】:

标签: ios swift swift2


【解决方案1】:

这是swift 2中错误处理的新方法...

do {
     if let feed = try NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers) as? NSDictionary {
      // Success block...
   }
} catch {
    print(error)
}

【讨论】:

  • 哦,是的,我以前见过,但是如何在不破坏周围一切的情况下用旧的错误处理方式替换它?还是我应该重写整个事情?
  • 只需将您的代码从标题复制到self.artistLabel.hidden = false 并在上述条件下将其放入成功块中......
【解决方案2】:

Swift 2 中执行此操作的方法是

let feed = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers)

【讨论】:

  • 我之前尝试过删除它一次,但我得到一个“调用可以抛出,但它没有标记为'try'并且错误未处理”感谢您的帮助
  • 编译器会接受上面的代码,不会抱怨。如果您在没有if 的情况下按照上述方式执行此操作,则可以正常工作。
  • @pbush25 - 现在,如果你不想使用try - catch 语法,你可以使用try?try!。仅仅做if let ... 是不够的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 2017-11-26
  • 1970-01-01
相关资源
最近更新 更多