Массив кортежей в Swift

У меня есть функция:

func parseJSON3(inputData: NSData) -> NSArray {
    var tempDict: (id:Int, ccomments:Int, post_date:String, post_title:String, url:String) = (id: 0, ccomments: 0, post_date: "null", post_title: "null", url: "null")
    var resultArray: (id:Int, ccomments:Int, post_date:String, post_title:String, url:String)[] = []
    var error: NSError?
    var jsonDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(inputData, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
    var firstArray = jsonDictionary.objectForKey("locations") as NSArray
    for dict in firstArray {
        tempDict.id = dict.valueForKey("ID") as Int
        tempDict.ccomments = dict.valueForKey("ccomments") as Int
        tempDict.post_date = dict.valueForKey("post_date") as String
        tempDict.post_title = dict.valueForKey("post_title") as String
        tempDict.url = dict.valueForKey("url") as String
        resultArray.append(tempDict)
    }
    return resultArray
}

в строке

resultArray.append (tempDict)

У меня ошибка:

отсутствует аргумент для параметра 'замечания' в Call

почему? Помогите пожалуйста....

3 ответов


мне кажется resultArray.append() обрабатывает кортеж немного как переменный параметр и пытается развернуть кортеж, чтобы соответствовать его собственным аргументам. Он жалуется на ваш второй параметр, потому что он ожидает только один. Я не видел такого поведения для Array.append() документировано в любом месте, поэтому я бы сказал, что это ошибка в Swift.

использование оператора добавления += не похоже, что есть эта проблема:

resultArray += tempDict

так что это довольно дико - не уверен, что я квалифицировал бы его как ошибку или как недокументированное поведение, но это определенно то, что должно быть на радаре для исправления / уточнения!

ситуация такова, что append обрабатывает ваш аргумент tempDict (который мы ожидали бы быть единственным аргументом метода массива, который принимает один член и добавляет его в коллекцию) как первый

сумасшедшие вещи! может быть, по замыслу, чтобы служить какой-то цели, может быть следствием наследования протокола, которое не должно было иметь такого эффекта... было бы интересно узнать ответ!


resultArray.append() с tempDict в качестве первого элемента кортежа (id).

изменить его на :

resultArray += tempDict

кажется, компилируется и работает.

Я не уверен, почему append() не ведет себя так же, может быть, вы можете подать ошибку!