У меня есть протокол GraphType
, которые могут иметь конкретные реализации:Возвращаясь тип протокола
protocol GraphType {
var vertexCount: Int {get}
var edgeCount: Int {get}
init(vertexCount: Int)
...
}
Тогда у меня есть функция, чтобы построить MST:
func primsMST(graph: GraphType) -> GraphType {
let ret = graph.dynamicType(vertexCount: graph.vertexCount)
return ret
}
Там нет прямого предупреждения компилятора в коде , но компилятор жалуется на эту функцию:
При испускании функции ИК-SIL ион @ _TF10SwiftStuff8primsMSTFPS_9GraphType_PS0__ для 'primsMST' в /Users/aeubanks/Dropbox/Programming/Apps/SwiftStuff/SwiftStuff/MST.swift:9:1
командованию не удался из-за сигнал: неисправность Сегментации: 11
Это не должно быть проблемой? Функция принимает любой объект, который реализует GraphType
и возвращает произвольное GraphType
, которое бывает таким же, как и вход. Когда я заменяю graph.dynamicType
на конкретную реализацию, например GraphAdjacencyList
, без изменения типа возвращаемого им типа, но я бы предпочел, чтобы тип возвращаемого значения был тем же классом, что и введенный граф. Auto-correct даже говорит, что ret
имеет GraphType
. Любой способ решить это?
Люди Swift ясно дали понять, что код, который компилируется, а затем сбой компилятора, проблематичен, и они хотят знать об этом. Поэтому, пожалуйста, напишите отчет об ошибке в Apple! Между тем, я опубликовал обходное решение с общей функцией. – matt