Предикаты с дженерикамиIOS

Программируем под IOS
Ответить
Anonymous
 Предикаты с дженериками

Сообщение Anonymous »

Я пытаюсь использовать предикат с дженериками, но я продолжаю получать следующую ошибку компиляции: < /p>
Cannot convert value of type 'PredicateExpressions.Equal
, E.EntityType.PrimaryKey?>, Key>, PredicateExpressions.Value>' to closure result type 'any StandardPredicateExpression'
< /code>
У меня есть следующее: < /p>
public protocol Entity {
associatedtype DomainModel
associatedtype PrimaryKey: Equatable

/// The entity's domain model
var domainModel: DomainModel { get }
/// The entity's primary key
var primaryKey: PrimaryKey { get }
}

public protocol DomainEntity {
associatedtype EntityType: PersistentModel & Entity

var entity: EntityType? { get }
}

@ModelActor
actor DataSource {
typealias Model = E.EntityType.DomainModel

func get(by key: Key) throws -> Model? {
let predicate: Predicate = #Predicate {
($0.primaryKey as? Key) == key // I’m having the error here
}
let fetchDescriptor = FetchDescriptor(predicate: predicate)

guard let entity: E.EntityType = try modelContext.fetch(fetchDescriptor).first else {
return nil
}

guard let model = entity.domainModel as? Model else {
throw DatabaseError.conversionFailed
}
return model
}
}
< /code>
Я понимаю, что ошибка объясняет, что она не может выяснить основные типы, но, поскольку оба свойства равномерно, это не должно быть проблемой. Или есть иначе?


Подробнее здесь: https://stackoverflow.com/questions/797 ... h-generics
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»