Instance Method インスタンスメソッド

descendant(_:_:)

Returns a specific descendant of the reflected subject, or nil if no such descendant exists. リフレクションされている主題の特定の子孫を返します、またはそのような子孫が存在しないならばnil

Declaration 宣言

func descendant(_ first: MirrorPath, _ rest: MirrorPath...) -> Any?

Parameters パラメータ

first

The first mirror path component to access. アクセスすることになる最初のミラーパス構成要素。

rest

Any remaining mirror path components. あらゆる残りのミラーパス構成要素。

Return Value 戻り値

The descendant of this mirror specified by the given mirror path components if such a descendant exists; otherwise, nil. 与えられたミラーパス構成要素によって指定されるこのミラーの子孫、もしそのような子孫が存在するならば;そうでなければ、nil

Discussion 解説

Pass a variadic list of string and integer arguments. Each string argument selects the first child with a matching label. Each integer argument selects the child at that offset. For example, passing 1, "two", 3 as arguments to myMirror.descendant(_:_:) is equivalent to: 文字列および整数の引数からなる可変長リストを渡してください。各文字列引数は、合致するラベルを持つ最初の子を選択します。各整数引数は、子をそのオフセットで選択します。例えば、1, "two", 3を引数としてmyMirror.descendant(_:_:)に渡すことは、次と同等です:


var result: Any? = nil
let children = myMirror.children
if let i0 = children.index(
    children.startIndex, offsetBy: 1, limitedBy: children.endIndex),
    i0 != children.endIndex
{
    let grandChildren = Mirror(reflecting: children[i0].value).children
    if let i1 = grandChildren.firstIndex(where: { $0.label == "two" }) {
        let greatGrandChildren =
            Mirror(reflecting: grandChildren[i1].value).children
        if let i2 = greatGrandChildren.index(
            greatGrandChildren.startIndex,
            offsetBy: 3,
            limitedBy: greatGrandChildren.endIndex),
            i2 != greatGrandChildren.endIndex
        {
            // Success!
            result = greatGrandChildren[i2].value
        }
    }
}

This function is suitable for exploring the structure of a mirror in a REPL or playground, but is not intended to be efficient. The efficiency of finding each element in the argument list depends on the argument type and the capabilities of the each level of the mirror’s children collections. Each string argument requires a linear search, and unless the underlying collection supports random-access traversal, each integer argument also requires a linear operation. この関数は、REPLまたはプレイグラウンドにおいてミラーの構造体を探索するのに適します、しかし効率を考慮されません。各要素を引数リストにおいて見つけることの効率は、引数型と、ミラーのもつchildrenコレクションそれらの各水準の能力に依存します。各文字列引数は線形探索を要求します、そして基底コレクションがランダムアクセス走査をサポートしない限り、各整数引数もまた線形演算を要求します。

See Also 参照

Querying Descendants 子孫について問い合わせる