Значение типа «Диапазон» не имеет элемента «карта», а тип «Матрица» не соответствует протоколу «Последовательность».

Я пытаюсь преобразовать MathSwift в swift3, и некоторые проблемы не могут быть решены, так как ˝Value типа 'Range' нет участника 'map'˝:

func toIntArray(index: MatrixIndexType) -> [Int] {

if index is [Int] {
    return index as! [Int]
} else if let rangeIndex = index as? Range<Int> {
    return rangeIndex.map({$0})
} else if let intIndex = index as? Int {
    return [intIndex]
}
return []}

Появляются другие проблемы, такие как «Тип «Матрица» не соответствует протоколу «Последовательность»».

extension Matrix: Sequence {

public func generate() -> AnyIterator<Double> {
    var nextIndex = 0
    return AnyIterator<Double> {
        if nextIndex == self.elements.count {
            return nil
        }
        nextIndex += 1
        return self.elements[nextIndex]
    }
}}

person user1801745    schedule 19.10.2016    source источник


Ответы (1)


Первая проблема:

Заменять

return rangeIndex.map({$0})

с

return [Int](rangeIndex.lowerBound..<rangeIndex.upperBound)

Вторая проблема:

Заменять

public func generate() -> AnyIterator<Double> {

с

public func makeIterator() -> AnyIterator<Double> {

Но функция итератора не может работать, потому что элемент с индексом 0 никогда не будет рассматриваться.
Чтобы это исправить

Заменять

nextIndex += 1
return self.elements[nextIndex]

с

let element = self.elements[nextIndex]
nextIndex += 1
return element
person vadian    schedule 19.10.2016
comment
Второй исходный элемент - return self.elements[nextIndex++]. Я изменил его на первое приращение перед возвратом... - person user1801745; 19.10.2016
comment
Я подозревал это. :-) Пост-инкремент невозможен в Swift 3 - person vadian; 19.10.2016
comment
Я думал, что идея заключается в том, чтобы вернуть следующий элемент массива... не так ли? - person user1801745; 19.10.2016
comment
Нет, он получает элемент, затем увеличивает индекс и возвращает элемент. То, что вы думаете, это [++nextIndex], что является огромной разницей в данном конкретном случае. Кстати, ваш код в вопросе рухнет. - person vadian; 19.10.2016