Как написать метод расширения с предложением «where» для типа «Predicate<each Input>» в SwiftData?

В SwiftData тип Predicate использует пакеты параметров:

struct Predicate<each Input>

Теперь я хочу добавить метод расширения для Predicate, который доступен только в том случае, если общий параметр имеет тип SomeType:

@Model
class SomeType {
    var someVar: Int
}

Я пытался заставить его работать, но он выдает различные ошибки:

extension Predicate where Input == SomeType { }

Ссылка на пакет «Вход» требует расширения с помощью ключевого слова «повторить».

Пакет типов «Вход» должен ссылаться на «каждый».

extension Predicate where each Input == SomeType { }

Ссылка на пакет «Вход» требует расширения с помощью ключевого слова «повторить».

extension Predicate where repeat each Input == (SomeType) { }

Требования к одному и тому же элементу пока не поддерживаются.

Как я могу добавить эту функцию как статическую функцию Predicate<each Input> где Input == SomeType?

static func predicateMatchingNegativeSomeVars() -> Predicate<SomeType> {
    #Predicate<SomeType> {
        $0.someVar < 0
    }
}
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В SE-0393 на самом деле упоминается синтаксис, аналогичный тому, который вы пытались использовать в разделе Будущие направления. На данный момент это не реализовано.

Но благодаря SE-361 вы можете просто сделать

extension Predicate<SomeType> {
    static func predicateMatchingNegativeSomeVars() -> Predicate<SomeType> {
        #Predicate<SomeType> {
            $0.someVar < 0
        }
    }
}

Тем не менее, поскольку метод, который вы хотите добавить, в любом случае — это static, вам не нужна эта привязка — вместо этого просто напишите extension Predicate { ... }. Это нужно только в том случае, если вы добавляете членов экземпляра.

Однако это отображается во время завершения кода для Predicate, где Input нет SomeType.

iSpain17 07.05.2024 09:56

@iSpain17 Да, интересно. Вероятно, языковой сервер просто не понимает пакеты параметров, не связанные с синтаксисом, используемым для объявления расширения.

Sweeper 07.05.2024 10:03

Другие вопросы по теме