как получить ассоциированное значение из перечисления - PullRequest
0 голосов
/ 11 мая 2018

У меня есть древовидная структура данных, которая содержит ассоциированное значение, в настоящее время при вызове она возвращает только полное дерево, и я пытаюсь получить доступ к отдельным значениям из значений.Я пытался использовать сопоставление if let для сопоставления с образцом, но это не сработало.

public indirect enum BinaryTree<T> {
    //left child, value, right child

    case node( BinaryTree<T>, T,T,T, BinaryTree<T>)
    case empty
    }

extension BinaryTree: CustomStringConvertible {
    public var description: String {
        switch self {
        case let .node(left, value, answer1, answer2, right):
            return " \(value) \(answer1) \(answer2) \(left.description) \(right.description)"
        case .empty:
            return ""
        }
    }
}





let node4 = BinaryTree.node(.empty, "4","A","B", .empty)
let node5 = BinaryTree.node(.empty, "5","A","B", .empty)
let node6 = BinaryTree.node(.empty, "6","A","B",.empty)
let node7 = BinaryTree.node(.empty, "7","A","B",.empty)




// intermediate nodes on the left
let fourtwofive = BinaryTree.node(node4, "2","A","B",node5)


// intermediate nodes on the right
let sixthreeeseven = BinaryTree.node(node6, "3","A","B",node7)

// root node
let tree = BinaryTree.node(fourtwofive, "1","A","B",sixthreeeseven)

как мне получить значение, answer1 и answer2 из перечисления

1 Ответ

0 голосов
/ 11 мая 2018

Вы работаете со связанными значениями, а не с кортежами. Имея это в виду, что, как вы и предполагали, вы хотите извлечь значения с помощью if let, это будет работать:

if case let .node(_, value, answer1, answer2, _) = tree {
    // process value, answer1 and answer2
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...