Xcode 8 (swift 3) Каков тип объекта?

#xcode #swift3 #ios10

#xcode #swift3 #ios10

Вопрос:

Каков правильный тип для объекта?

Например, при сохранении значения в атрибут объекта, какое объявление типа должно заменить три вопросительных знака ниже?

 func setSample() {
    let saveSample: <type???> = SampleEntity(context: context)
    saveSample.sampleAttribute = "Save a new string."
    do {
        try context.save()
    } catch {
         print("Error with save: (error)")
    }
}
  

FWIW: NSEntityDescription возвращает ошибки:

 Cannot convert value of type 'SampleEntity' to specified type 'NSEntityDescription'
Value of type 'NSEntityDescription' has no member 'sampleAttribute'
  

Контекст Я бы хотел превратить объект в переменную, чтобы сделать что-то вроде этого:

 func setSample() {
    var saveSample: ??? 
    if (criteria) { saveSample = Entity1(context: context) }
    if (criteria) { saveSample = Entity2(context: context) }
    if (criteria) { saveSample = Entity3(context: context) }
    saveSample.sampleAttribute1 = "Foo"
    saveSample.sampleAttribute2 = "Bar"
    saveSample.sampleAttributeNth = "Etc"
    do {
        try context.save()
    } catch {
         print("Error with save: (error)")
    }
}
  

Комментарии:

1. Нам нужно больше контекста о том, чего именно вы пытаетесь достичь, и каковы объявления Entity1 и Entity2 .

2. @ Alexander Momchliov, Entity1 , Entity2 , Entity3 указаны ли имена объектов в CoreData.xcdatamodeld.

Ответ №1:

Используйте ??? = SampleEntity или удалите ??? часть полностью:

 let saveSample = SampleEntity(context: context)
let saveSample: SampleEntity = SampleEntity(context: context)
let saveSample: SampleEntity
  

Комментарии:

1. Это не работает в последнем подходе, в котором он вперед объявляет переменную, которая будет заполнена позже одним из нескольких вариантов, на основе некоторых критериев.