A predicate expression that evaluates to a collection. あるコレクションに評価する述部式。
init(forSubquery:usingIteratorVariable:predicate:)
Availability 有効性
- iOS 3.0+
- iPadOS 3.0+
- macOS 10.5+
- Mac Catalyst 13.1+
- tvOS 9.0+
- watchOS 2.0+
Technology
- Foundation ファウンデーション
Declaration 宣言
init(forSubquery expression: NSExpression
,
usingIteratorVariable variable: String
,
predicate: NSPredicate
)
Parameters パラメータ
expression
variable
Used as a local variable, and will shadow any instances of variable in the bindings dictionary. The variable is removed or the old value replaced once evaluation completes. ローカル変数として使われます、そして束縛されている辞書の中の変数のあらゆるインスタンスを陰にします。変数は、除去されます、または一旦評価が完了すると古い値が置き換えられます。
predicate
The predicate used to determine whether the element belongs in the result collection. 要素が結果のコレクションに属するかどうか決定するために使われる述部。
Return Value 戻り値
An expression that filters a collection by storing elements in the collection in the variable variable and keeping the elements for which qualifier returns true ある式、それはコレクションをフィルタすることを、variable変数の中のコレクションの中の要素をソートすること、そしてそれに対して限定子がtrueを返すところの要素を保有することによって行います。
Discussion 議論
This method creates a sub-expression, evaluation of which returns a subset of a collection of objects. It allows you to create sophisticated queries across relationships, such as a search for multiple correlated values on the destination object of a relationship. このメソッドは下位式を作成します、それの評価はオブジェクトのコレクションのサブセットを返します。それは、あなたに洗練されたクエリをリレーションシップを越えて作成させます、例えばあるリレーションシップの行き先オブジェクト上での複数の相互に関連した値に対する検索など。
For example, suppose you have an Apartment entity that has a to-many relationship to a Resident entity, and that you want to create a query for all apartments inhabited by a resident whose first name is "Jane" and whose last name is "Doe". Using only API available for OS X v 10.4, you could try the predicate: 例えば、あなたがあるApartment登録項目を持つと仮定してください、それはResident登録項目に対する対多関係を持ちます、そしてそれはそのファーストネームが "Jane" でそのラストネームが "Doe" である居住者が住むすべてのアパートメントに対してクエリを作成することをあなたが望むものです。OS X v 10.4に利用可能なAPIだけを使って、あなたはこの述部を試みることが可能でした:
but this will always return false since resident
and resident
both return collections. You could also try:
しかしこれは常にfalseを返します、resident
とresident
の両方ともコレクションを返すことから。あなたはこうもできました:
but this is also flawed—it returns true if there are two residents, one of whom is John Doe and one of whom is Jane Smith. The only way to find the desired apartments is to do two passes: one through residents to find "Jane Doe", and one through apartments to find the ones where our Jane Does reside. しかしこれも欠点があります — それは2人の居住者、その1人が John Doe でその1人が Jane Smithがいるならばtrueを返します。望み通りのアパートメントを見つけるただ1つの道はこの2つを通ります:1つは "Jane Doe" を見つけるために居住者を端から端まで、そして1つは、そこにおいて私たちの Jane Does が住むところのものを見つけるためにアパートメントを端から端まで。
Subquery expressions provide a way to encapsulate this type of qualification into a single query. サブクエリ式は、この種の必要条件を単一のクエリへとカプセル化する方法を提供します。
The string format for a subquery expression is: サブクエリ式に対する文字列書式設定は次になります:
where expression
is a predicate expression that evaluates to a collection, variable
is an expression which will be used to contain each individual element of collection
, and predicate
is the predicate used to determine whether the element belongs in the result collection.
ここでexpression
はコレクションに評価する述部式です、variable
はcollection
の個々の要素を含むために使われる式です、そしてpredicate
はその要素が結果コレクションに含まれるかどうか決定するために使われる述部です。
Using subqueries, the apartment query could be reformulated as サブクエリを使って、アパートメントクエリが次のように再公式化されることができました
or または