Рассмотрим следующие объекты:
enum SetType: String {
case anaerobic, isometric
}
class RealmSet: Object {
@objc dynamic private var setType: String = ""
var type: SetType {
get {
guard let unwrappedSetType = SetType(rawValue: setType) else {
return .anaerobic
}
return unwrappedSetType
}
set {
self.setType = newValue.rawValue
}
}
}
protocol ExerciseSet {
var setType: SetType { get }
}
class Exercise: Object {
private let setsValues = List<RealmSet>()
var sets: [ExerciseSet] {
var sets = [ExerciseSet]()
for setValue in self.setsValues {
switch setValue.type {
case .anaerobic:
// Do Something
case .isometric:
// Do Something
}
}
return sets
}
}
Что происходит, когда я пытаюсь выполнить итерацию этого массива setsValues
и выполнить switch
, чтобы узнать, что это за тип RealmSet
,вместо этого вызывается свойство type
getter из RealmSet
, вызывается метод установки.Поскольку этот объект является объектом Realm, приложение мгновенно завершает работу, потому что я не выполняю транзакцию записи, что верно, потому что мне нужен только доступ к получателю свойства, а не к его установщику.
Самое странное из этогоСитуация такова, что это не происходит, когда версии Xcode ниже, чем 9.3.Это происходит только в Xcode 9.3 и 9.4.Когда я использую Xcode 9.2, все работает отлично.
Я не знаю, в чем проблема.Если это Realm lib, некоторые изменения в версиях Xcode 9.3 и 9.4 или в каких.