я установки два протокола ниже в скор 2протокола типа ограничение двух протоколов
- Генеративного (из-за отсутствие лучшего названия), который содержит массив элементов и обеспечивает Datasource как функциональность, как и подсчет индекс
public protocol Generative {
typealias GeneratedType
var elements: [GeneratedType] { get }
}
public extension Generative {
func count() -> Int {
return elements.count
}
subscript(index:Int) -> GeneratedType? {
if index >= count() {
return nil
}
return elements[index]
}
}
public protocol Selectable {
typealias SelectableType: Hashable
var selectedElements: Set<SelectableType> { get set }
}
extension Selectable {
public func isSelected(elem: SelectableType) -> Bool {
return selectedElements.contains(elem)
}
public mutating func addSelection(elem: SelectableType) {
selectedElements.insert(elem)
}
public mutating func removeSelection(elem: SelectableType) {
selectedElements.remove(elem)
}
public mutating func clearSelections() {
selectedElements.removeAll()
}
}
таким образом, в случае, если объект реализует как генеративный и Выбирается тогда я хочу, чтобы иметь возможность вернуть выбранные индексы, так что я написал эту функцию:
func selectedIndices<S: Selectable where S: Generative, S.GeneratedType == S.SelectableType>(ds: S) -> [NSIndexPath] {
var selections: [NSIndexPath] {
return ds.selectedElements
.map{ (p: S.GeneratedType) -> NSIndexPath? in
if let idx = ds.elements.indexOf(p) { idx
return NSIndexPath(forRow: idx, inSection: 0)
}
return nil
}
.filter{ $0 != nil }
.map{ $0! }
}
return selections
}
по какой-то причине компоновщик печатает:
Сбой команды из-за сигнала: неисправность Сегментация: 11
Не уверен, почему это, я не могу понять, еще один способ указать эту функцию для работы с объектами, которые реализуют оба протокола и связанные с ними типы, соответствующие ... Любые идеи?
P.S. код в Сущностью: https://gist.github.com/edwardIshaq/715b0e134fb47d2e28cc
------- UPDATE удаление вычисляемого свойства, казалось, сделать трюк:
func selectedIndices<S: Selectable where S: Generative, S.GeneratedType == S.SelectableType>(ds: S) -> [NSIndexPath] {
return ds.selectedElements
.flatMap { (p: S.GeneratedType) -> NSIndexPath? in
if let idx = ds.elements.indexOf(p) { idx
return NSIndexPath(forRow: idx, inSection: 0)
}
return nil
}
}
Это может быть длинный выстрел, но попробуйте очистить проект и строительство снова. Я видел эту ошибку только один раз и помогал cmd + shift + k. – 66o
p.s. вместо '.map {return a optional} .filter {$ 0! = nil} .map {$ 0! } ', вы можете написать' .flatMap {return a optional} ', он будет делать то же самое. –
@ 66o Я пробовал чистить и строить, и все это, Linker продолжает рушиться ... –