Код, указанный ниже, предназначен для группировки публикаций в журналах по годам выпуска.Свифт 2 выпуск с закрытием для коллекции groupBy
Но я получил сообщение об ошибке «Не удается преобразовать значение типа„(журнал) -> Int“ожидаемого типа аргумента„(_) -> _“»
Вот площадка с усеченную версию из настоящий код для игры http://swiftlang.ng.bluemix.net/#/repl/1de81132cb2430962b248d2d6ff64922e2fe912b1480db6a7276c6a03047dd89
class Journal {
var releaseDate: Int = 0
static var journals = [Journal]()
class func groupedReduce<S: SequenceType, K: Hashable, U> (
source: S,
initial: U,
combine: (U, S.Generator.Element) -> U,
groupBy: (S.Generator.Element) -> K
)
-> [K:U]
{
var result: [K:U] = [:]
for element in source {
let key = groupBy(element)
result[key] = combine(result[key] ?? initial, element)
}
return result
}
class func groupBy() {
let byYear = { (journal: Journal) in
journal.releaseDate
}
let groupedJournals = groupedReduce(journals, initial: 0, combine:+, groupBy: byYear)
print("Grouped journals = \(groupedJournals)")
}
}
Journal.journals = [Journal(), Journal(), Journal(), Journal()]
for j in Journal.journals {
j.releaseDate = 1
}
Journal.groupBy()
есть более чем простая проблема с кодом. первый заключается в том, что компилятор не может вывести тип groupedJournals. используя let gropedJournals: Int = .... должен решить эту проблему. Хуже всего то, что у Журнала нет генератора-члена ... просто продолжайте шаг за шагом – user3441734
другой проблемой является то, что оператор + ожидает, что оба операнда и результат будут одного типа ... – user3441734
Вы смешиваете вещи. S - это SequenceType, @ user3441734 –