ошибка после обновления Xcode до 7.0

Я разрабатываю приложение для iOS на Swift. Когда я обновил Xcode до 7.0, я получаю ошибку в swiftyJSON.

 static func fromObject(object: AnyObject) -> JSONValue? {
    switch object {
    case let value as NSString:
        return JSONValue.JSONString(value as String)
    case let value as NSNumber:
        return JSONValue.JSONNumber(value)
    case let value as NSNull:
        return JSONValue.JSONNull
    case let value as NSDictionary:
        var jsonObject: [String:JSONValue] = [:]
        for (k:AnyObject, v:AnyObject) in value {// **THIS LINE- error: "Definition conflicts with previous value"**
            if let k = k as? NSString {
                if let v = JSONValue.fromObject(v) {
                    jsonObject[k] = v
                } else {
                    return nil
                }
            }
        }

В чем проблема? Не могли бы вы помочь, пожалуйста?


person Spartak    schedule 19.09.2015    source источник


Ответы (1)


 for (k:AnyObject, v:AnyObject) in value { .. }

должен быть написан в Swift 2 как

for (k, v) : (AnyObject, AnyObject) in value { .. }

Из примечаний к выпуску Xcode 7:

Аннотации типов больше не допускаются в шаблонах и считаются частью внешнего объявления. Это означает, что код ранее был записан как:

var (a : Int, b : Float) = foo()

нужно записать как:

var (a,b) : (Int, Float) = foo()

если требуется явная аннотация типа. Прежний синтаксис был неоднозначным с метками элементов кортежа.

Но в вашем случае явная аннотация вообще не нужна:

for (k, v) in value { .. }

потому что NSDictionary.Generator уже определен как генератор, возвращающий (key: AnyObject, value: AnyObject) элементов.

person Martin R    schedule 19.09.2015