class NSPredicate : NSObject, NSCopying, NSSecureCoding

<aside> πŸ’‘ Predicate은 객체듀을 ν•„ν„°λ§ν• λ•Œ μ‚¬μš©ν•˜λŠ” 논리적 쑰건, 즉 질의(query)λ₯Ό λ‚˜νƒ€λ‚Έλ‹€. NSComparisonPredicate, NSCompoundPredicate, NSExpression 객체 λ“±μ—μ„œ predicate을 직접 생성할 μˆ˜λ„ μžˆμ§€λ§Œ, NSPredicate의 νƒ€μž… λ©”μ†Œλ“œμ— predicate λ¬Έμžμ—΄ 양식을 μ „λ‹¬ν•˜μ—¬ predicate을 μƒμ„±ν•˜λŠ” 것이 μΌλ°˜μ μ΄λ‹€.

<aside> βœ‹ NSComparisonPredicate, NSCompoundPredicate, NSExpression νŽ˜μ΄μ§€λŠ” μ™œ μ—†λ‚˜μš”?

<aside> πŸ“’ 본인 ν”„λ‘œμ νŠΈμ˜ minimum deploymentκ°€ iOS 17 및 기타 이상이라면, Predicate νƒ€μž…μ„ μ‚¬μš©ν•˜κΈ°λ₯Ό ꢌμž₯ν•œλ‹€. NSPredicateμ—μ„œλ„ Predicate을 인자둜 λ°›λŠ” μƒμ„±μžκ°€ μΆ”κ°€λ˜μ—ˆμœΌλ―€λ‘œ, κΈ°μ‘΄ NSPredicate이 μ‚¬μš©λ˜λ˜ λͺ¨λ“  κ³³μ—μ„œ Predicate을 μ‚¬μš©ν•  수 μžˆλ‹€. μƒˆ Predicate νƒ€μž…μ€ μƒˆ 맀크둜 μ‹œμŠ€ν…œμ„ μ‚¬μš©ν•˜μ—¬ Swift ꡬ문으둜 쑰건식을 μž‘μ„±ν•  수 있으며 의미 뢄석, νƒ€μž… μΆ”λ‘ , syntax highlighting 등을 μ§€μ›ν•˜λ―€λ‘œ λͺ¨λ“  λ©΄μ—μ„œ μš°μ›”ν•˜λ‹€.

단, Predicate을 NSPredicate으둜 λ³€ν™˜ν•˜κΈ° μœ„ν•΄μ„œλŠ” λͺ‡κ°€μ§€ μ£Όμ˜μ‚¬ν•­μ΄ μžˆλ‹€. ν•΄λ‹Ή μƒμ„±μž μ„€λͺ…을 μ°Έκ³ ν•˜μž: 2023λ…„ - Predicate을 인수둜 λ°›λŠ” μƒμ„±μž μΆ”κ°€.

</aside>

NSPredicate λ¬Έμžμ—΄ 양식 문법

<aside> <img src="/icons/list_blue.svg" alt="/icons/list_blue.svg" width="40px" /> λͺ©μ°¨

</aside>

</aside>

κ°œμš”

predicate은 주어진 객체에 λŒ€ν•΄ μ‘°κ±΄μœΌλ‘œλΆ€ν„° 논리값(Boolean)을 λ°˜ν™˜ν•˜λŠ” ꡬ문 λ‹¨μœ„λ‘œμ„œ, ν‘œν˜„μ‹(expression)κ³Ό μ—°μ‚°μž(operator)의 μ‘°ν•©μœΌλ‘œ 이루어진닀. 주둜 λ‹€μŒ λΆ€λ₯˜μ—μ„œ ν™œμš©λœλ‹€:

<aside> βœ‹ μœ„ κ²½μš°κ°€ μ•„λ‹ˆλ©΄ μ‚¬μš©ν•  수 μ—†λ‚˜μš”?

NSPredicate ν΄λž˜μŠ€λŠ” λ¬Έμžμ—΄ 양식을 ν†΅ν•œ predicate 생성 λ©”μ†Œλ“œμ™€ predicate 평가 λ©”μ†Œλ“œλ₯Ό μ œκ³΅ν•œλ‹€. 두 μ„œλΈŒν΄λž˜μŠ€λ₯Ό 가진닀:

λ˜ν•œ, predicate의 ν‘œν˜„μ‹μ€ λͺ¨λ‘ NSExpression 객체둜 λ‚˜νƒ€λ‚Έλ‹€. κ°€μž₯ κ°„λ‹¨ν•œ ν‘œν˜„μ‹μ€ μƒμˆ˜λ‹€. 예λ₯Ό λ“€μ–΄, predicate λ‚΄μ—μ„œ ν‰κ°€λ˜λŠ” 쀑인 객체의 keypathλ‘œλΆ€ν„° 값을 μ–»μ–΄μ˜€λŠ” κ²½μš°κ°€ λΉˆλ²ˆν•  것이닀. κ·Έ 외에도 predicate λ‚΄μ—μ„œ ν‰κ°€λ˜λŠ” 쀑인 객체λ₯Ό λ‚˜νƒ€λ‚Ό λ•Œ, predicate λ‚΄μ—μ„œ λ³€μˆ˜λ‘œ μ±„μ›Œμ Έμ•Ό ν•˜λŠ” λΆ€λΆ„μ˜ placeholderλ₯Ό λ‚˜νƒ€λ‚Ό λ•Œ, λ°°μ—΄ λ‚΄μ—μ„œ 연산을 μˆ˜ν–‰ν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•  λ•Œ λͺ¨λ‘ NSExpression으둜 ν‘œν˜„λœλ‹€.

ν•œκ³„μ 

predicate을 ν†΅ν•œ queryμ—λŠ” μ‹€μ œ κ΅¬ν˜„λœ 곡톡 μ–Έμ–΄κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, μƒμ‘ν•˜λŠ” 데이터 Store에 λ§žμΆ”μ–΄ SQL, XML, λ˜λŠ” 기타 λ‹€μ–‘ν•œ ν˜•μ‹μœΌλ‘œ λ²ˆμ—­λœλ‹€. Cocoa의 predicate μ‹œμŠ€ν…œμ€ μœ μš©ν•œ λ²”μœ„μ˜ μ—°μ‚°μžλ“€μ„ μ œκ³΅ν•˜λŠ” 것에 λͺ©μ μ„ λ‘λ―€λ‘œ, λͺ¨λ“  데이터 Storeμ—μ„œ predicate이 μ œκ³΅ν•˜λŠ” query λͺ…λ Ήμ–΄λ₯Ό 100% μ§€μ›ν•˜λŠ” 것이 μ•„λ‹ˆλ©°, predicate μ‹œμŠ€ν…œμ—μ„œ λͺ¨λ“  데이터 Storeκ°€ μ œκ³΅ν•˜λŠ” 전체 질의 방법을 100% μ§€μ›ν•˜λŠ” 것도 μ•„λ‹ˆλ‹€. λ”°λΌμ„œ κ²½μš°μ— 따라 predicate의 일뢀 λ””ν…ŒμΌλ“€μ€ λ¬΄μ‹œλ  수 있으며(λ¬Έμžμ—΄ 비ꡐ predicate이 κΈ°μ‘΄ μ˜λ„μ™€ 달리 λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λ³„ν•˜μ§€ μ•ŠλŠ”λ‹€κ±°λ‚˜), μ§€μ›λ˜μ§€ μ•ŠλŠ” μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•  경우 μ—λŸ¬λ₯Ό 던질 μˆ˜λ„ μžˆλ‹€. 예λ₯Ό λ“€μ–΄: