考虑以下对象:
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
并执行 aswitch
以发现哪种是 that RealmSet
,而不是type
getter 属性 fromRealmSet
被调用时,setter 被调用。由于这个对象是一个 Realm 对象,应用程序会立即崩溃,因为我没有运行写事务,这是真的,因为我只需要访问属性 getter,而不是它的 setter。
这种情况最奇怪的是当 Xcode 版本低于 9.3 时不会发生这种情况。这只发生在 Xcode 9.3 和 9.4 中。当我使用 Xcode 9.2 时,一切正常。
我不知道问题出在哪里。如果是 Realm lib,Xcode 版本 9.3 和 9.4 或什么的一些变化。