Почему атрибут типа «Дата» в CoreData оказывается типом «TimeInterval» в расширении класса сущностей? - PullRequest
0 голосов
/ 13 февраля 2020

Я создал объект, который имеет два атрибута типа «дата».

enter image description here

Однако, когда я пытаюсь установить эти атрибуты, XCode жалуется, что это «TimeInterval» :

func updateUI() {
    titleTextView.text = entry?.title!
    textTextView.text = entry?.text!
    if let date = entry?.dueDate {
        dateInput.text = formatter(date) //err: Cannot convert value of type 'TimeInterval' (aka 'Double') to expected argument type 'Date'
    }
    let type32: Int32 = entry!.type
    let type: Int = Int(type32)
    priorityInput.text = priorityOptions[type]
}

enter image description here

Расширение, для которого я выбрал «категорию / расширение», этот сгенерированный Xcode недоступен для редактирования:

extension Entry {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Entry> {
        return NSFetchRequest<Entry>(entityName: "Entry")
    }

    @NSManaged public var creatTime: TimeInterval. //this one and the "dueDate"
    @NSManaged public var dueDate: TimeInterval
    @NSManaged public var ifDone: Bool
    @NSManaged public var text: String?
    @NSManaged public var title: String?
    @NSManaged public var type: Int32

}

enter image description here

Почему это происходит и как я могу превратить эти два в дату?

1 Ответ

1 голос
/ 13 февраля 2020

TimeInterval будет количеством секунд с 2001-01-01T00: 00: 00Z. Xcode генерирует свойство с этим типом, потому что вы установили флажок «Использовать скалярный тип» на первом снимке экрана.

Вы можете создать Date из этих TimeInterval s, например:

Date(timeIntervalSinceReferenceDate: someTimeInterval)

Вы должны снять галочку и восстановить классы. Типы теперь будут NSDate.

Однако, если вам нужны типы Swift Date, вам нужно другое решение. Смотрите здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...