Ошибка сегментации Xcode 11

Ошибка сегментации появляется при сериализации AnyArrayBox

  1. При выполнении прохода #0 SILModuleTransform "SerializeSILPass".
  2. При сериализации AnyArrayBox (в модуле «Модуль») 0 swift 0x000000010d7abeb3 PrintStackTraceSignalHandler(void*) + 51 1 swift 0x000000010d7ab686 SignalHandler(int) + 358 2 libsystem_platform.dylib 0x00007fff76c31btramp5d _s9mptramp5d

Вот структура AnyArray

    struct AnyArray<Element>: RandomAccessCollection {

    typealias Index = Int

    private let box: AnyArrayBase<Element>

    init<Concrete: RandomAccessCollection>(_ concrete: Concrete) where Concrete.Element == Element, Concrete.Indices == Indices {
        box = AnyArrayBox(concrete)
    }

    var startIndex: Int { return box.startIndex }
    var endIndex: Int { return box.endIndex }

    func index(after i: Int) -> Int {
        return box.index(after: i)
    }

    subscript(position: Index) -> Element {
        return box[position]
    }

}

И два других, которые используются там

private class AnyArrayBase<Element>: RandomAccessCollection {

    init() {
        guard type(of: self) != AnyArrayBase.self else {
            fatalError("_AnyArrayBase<Element> is an abstract class, it can not be created; create subclass instance instead")
        }
    }

    typealias Index = Int

    var startIndex: Int { fatalError("Must override") }
    var endIndex: Int { fatalError("Must override") }

    func index(after i: Int) -> Int {
        fatalError("Must override")
    }

    subscript(position: Index) -> Element {
        fatalError("Must override")
    }

}

private final class AnyArrayBox<Concrete: RandomAccessCollection>: AnyArrayBase<Concrete.Element> where Concrete.Indices == AnyArrayBase<Concrete.Element>.Indices {

    private let concrete: Concrete

    init(_ concrete: Concrete) {
        self.concrete = concrete
    }

    override var startIndex: Int { return concrete.startIndex }
    override var endIndex: Int { return concrete.endIndex }

    override func index(after i: Int) -> Int {
        return concrete.index(after: i)
    }

    override subscript(position: Index) -> Element {
        return concrete[position]
    }

}

Как я могу это исправить? Есть рекомендации?


person clover4leaf    schedule 23.09.2019    source источник
comment
У меня та же проблема, которая возникла после перехода на Xcode 11.0 (11A420a). В моем случае она проявляется в простой структуре. Он указывает на эту строку: var dim_values : (dim1:String?,dim2:String?,dim3:String?)   -  person XFawkes    schedule 24.09.2019
comment
Изменение вышеуказанного кортежа dim_values ​​на структуру решило проблему для меня.   -  person XFawkes    schedule 24.09.2019
comment
@XFawkes это мне тоже помогает, спасибо!   -  person Aleksei Danilov    schedule 25.09.2019


Ответы (2)


это работает

var dim_values : (dim1:String?,dim2:String?,dim3:String?) = (nil, nil, nil)

видимо, компилятору нужна явная инициализация (до нуля)

person Simone Semprini    schedule 10.01.2020

У меня была такая же проблема при переходе на Xcode 11.0 (11A420a). Он указывал на строку, в которой у меня был кортеж как часть структуры:

var dim_values : (dim1:String?,dim2:String?,dim3:String?) 

Я изменил это на другую структуру, и это решило проблему.

person XFawkes    schedule 26.09.2019