struct Predicate<each Input> : Sendable, Codable, CodableWithConfiguration

<aside> πŸ’‘ 검색 λ˜λŠ” 필터링을 λͺ©μ μœΌλ‘œ μž…λ ₯κ°’λ“€μ˜ 집합을 κ²€μ‚¬ν•˜λŠ”λ° μ‚¬μš©λ˜λŠ” 논리적 쑰건식.

2023λ…„ NSPredicate νƒ€μž… λŒ€μ²΄λ₯Ό λͺ©μ μœΌλ‘œ μΆ”κ°€λ˜μ–΄ iOS 17, … μ΄μƒμ—μ„œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

NSPredicateκ³Ό 비ꡐ해 λ‹€μŒκ³Ό 같은 μž₯점이 μžˆλ‹€:

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

</aside>

</aside>

κ°œμš”

Predicate은 Boolean κ°’(true/false)으둜 ν‰κ°€λ˜λŠ” 논리적 쑰건식이닀. ν‘œν˜„μ‹(expression) 트리 κ΅¬μ‘°λ‘œμ„œ 전체 predicate을 κ΅¬μ„±ν•˜κ³ , μ—°μ‚°μž λ˜ν•œ ν”Όμ—°μ‚°μž ν‘œν˜„μ‹μ„ ν¬ν•¨ν•œ ν•˜λ‚˜μ˜ ν‘œν˜„μ‹μœΌλ‘œμ„œ μ •μ˜λœλ‹€. μ»¬λ ‰μ…˜μ—μ„œ 필터링을 μˆ˜ν–‰ν•˜κ±°λ‚˜ νŠΉμ • μš”μ†Œλ₯Ό 검색할 λ•Œ μ‚¬μš©ν•˜λŠ”λ°, ꡬ체적인 μ£Όμš” ν™œμš©μ²˜λŠ” λ‹€μŒκ³Ό κ°™λ‹€:

extension Sequence {
     public func filter(_ predicate: **Predicate<Self.Element>**) throws -> [Self.Element]
}

predicate을 μž‘μ„±ν•  λ•ŒλŠ” #Predicate 맀크둜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν΄λ‘œμ € 내에 단일 ν‘œν˜„μ‹μœΌλ‘œ 쑰건식을 μž‘μ„±ν•œλ‹€:

let messagePredicate = #Predicate<Message> { message in
    message.length < 100 && message.sender == "Jeremy"
}

predicate을 μž‘μ„±ν•  λ•Œ ν΄λ‘œμ €λ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ, #Predicate λ§€ν¬λ‘œλŠ” μ»΄νŒŒμΌμ‹œ ν•΄λ‹Ή ν΄λ‘œμ € μ½”λ“œλ₯Ό PredicateExpressions λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ •μ˜λœ ν‘œν˜„μ‹(PredicateExpression) νƒ€μž… ꡬ쑰둜 ν•΄μ„ν•˜μ—¬ Predicate νƒ€μž…μœΌλ‘œ λ³€ν™˜μ‹œν‚¨λ‹€. (보닀 μžμ„Έν•˜κ²ŒλŠ”, ν΄λ‘œμ € μ½”λ“œμ˜ 각 ν‘œν˜„μ‹ μ»΄ν¬λ„ŒνŠΈλ₯Ό μƒμ‘ν•˜λŠ” PredicateExpression을 λ°˜ν™˜ν•˜λŠ” builder νƒ€μž… λ©”μ†Œλ“œμ˜ 호좜둜 λ³€ν™˜μ‹œν‚€λ©°, 이 builder λ©”μ†Œλ“œ λ˜ν•œ PredicateExpressions λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ •μ˜λ˜μ–΄ μžˆλ‹€.) λ”°λΌμ„œ ν΄λ‘œμ €μ— μžˆλŠ” μ½”λ“œλŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ μ‹€μ œλ‘œ μž‘λ™λ˜λŠ” 것이 μ•„λ‹ˆλΌ, λ§€ν¬λ‘œμ— μ „λ‹¬ν•˜λŠ” μΌμ’…μ˜ μš”μ²­μΌ 뿐이닀.

Swift Predicateμ—μ„œ μ§€μ›ν•˜λŠ” ν‘œν˜„μ‹μ€ StandardPredicateExpression ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•˜λŠ” ν‘œν˜„μ‹λ“€λ§ŒμœΌλ‘œ ν•œμ •λ˜λ©°, κ°œλ°œμžλ“€μ΄ ν•΄λ‹Ή ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•˜λŠ” μƒˆ νƒ€μž…μ„ μΆ”κ°€ν•˜λŠ” 것은 κΈˆμ§€λ˜μ–΄ μžˆλ‹€.

PredicateExpressions λ„€μž„μŠ€νŽ˜μ΄μŠ€λ‘œλΆ€ν„°, Predicate μ •μ˜ λ‚΄μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” μ—°μ‚° 및 ν‘œν˜„μ‹μ„ μ•Œμˆ˜ μžˆλ‹€: