xcode 7 не может присвоить значение типа '[NSHTTPCookie]' значению типа '[NSHTTPCookie]'

Я только что обновился до Xcode7 и пытаюсь переключить свой проект на использование синтаксиса Swift 2.0, когда столкнулся с этой ошибкой в ​​файле из библиотеки с открытым исходным кодом, которую я использую. Вот соответствующий код:

public lazy var cookies:[String:NSHTTPCookie] = {
    let foundCookies: [NSHTTPCookie]
    if let responseHeaders = (self.response as? NSHTTPURLResponse)?.allHeaderFields {
        foundCookies = NSHTTPCookie.cookiesWithResponseHeaderFields(responseHeaders, forURL:NSURL(string:"")!) as! [NSHTTPCookie]
    } else {
        foundCookies = []
    }
    var result:[String:NSHTTPCookie] = [:]
    for cookie in foundCookies {
        result[cookie.name] = cookie
    }
    return result
    }()

Ошибка гласит: Невозможно присвоить значение типа '[NSHTTPCookie]' значению типа '[NSHTTPCookie]'

Есть что-то, чего я здесь не хватает?

1 ответ

Решение

Измените свой код на это:

public lazy var cookies:[String:NSHTTPCookie] = {
  let foundCookies: [NSHTTPCookie]
  if let responseHeaders = (self.response as? NSHTTPURLResponse)?.allHeaderFields as? [String:String] {
    foundCookies = NSHTTPCookie.cookiesWithResponseHeaderFields(responseHeaders, forURL:NSURL(string:"")!)
  } else {
    foundCookies = []
  }
  var result:[String:NSHTTPCookie] = [:]
  for cookie in foundCookies {
    result[cookie.name] = cookie
  }
  return result
  }()

Изменения:

  • if let responseHeaders ... линия - добавил as? [String:String], так как allHeadersFields тип возврата [NSObject : AnyObject] и не [String:String] требуется cookiesWithResponseHeaderFields...

  • удален as! [NSHTTPCookie] - это не имеет смысла, потому что cookiesWithResponseHeaderFields тип возврата уже [NSHTTPCookie]

Просто проверь cookiesWithResponseHeaderFields подпись:

class func cookiesWithResponseHeaderFields(headerFields: [String : String],
  forURL URL: NSURL) -> [NSHTTPCookie]

Пожалуйста, прочитайте Как мне задать хороший вопрос. По крайней мере, вы должны указать на линии, где проблема и т. Д.

Другие вопросы по тегам