Массив кортежей в 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()
не ведет себя так же, может быть, вы можете подать ошибку!