Протоколы и связанные типы в массивах

WPARAM и LPARAM являются типами. Вместо этого вы должны использовать msg.wParam и msg.lParam:

if((HIWORD(msg.wParam)) == BN_CLICKED and ((HWND)msg.lParam) == hwndButton1)
2
задан rmaddy 23 January 2019 в 16:21
поделиться

1 ответ

Вы, вероятно, хотите, чтобы родительские и дочерние узлы имели тип того же типа , что и сам узел, а не только некоторый тип , соответствующий Node. Это будет Self в определении протокола:

protocol Node {
    var parent: Self? { get set }
    var children: [Self] { get set }
}

Теперь вы можете определить конкретный класс (см. Требование к протоколу Swift, которое может быть удовлетворено только при использовании окончательного класса для почему класс должен быть final):

final class TreeNode: Node {
    var parent: TreeNode? = nil
    var children: [TreeNode] = []
}

и

func getReversedChildren<T: Node>(node: T) -> [T] {
    return node.children.reversed()
}

компилируются без проблем.

0
ответ дан Martin R 23 January 2019 в 16:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: