Я бы хотел создать подкласс class
, который реализует OptionSet
, чтобы я мог добавить некоторые дополнительные options
только для этого subclass
.Это возможно?Я пробовал что-то вроде этого:
extension AugmentedRealityViewSceneKit {
public class EngineConfiguration: OptionSet {
public static let enableSun = EngineConfiguration(rawValue: 1 << 0)
public static let enableFloor = EngineConfiguration(rawValue: 1 << 1)
public var rawValue: Int
required public init(rawValue: RawValue) {
self.rawValue = rawValue
}
}
}
extension AugmentedRealityViewARKit {
public class EngineConfiguration: AugmentedRealityViewSceneKit.EngineConfiguration {
public static let enableWorldTracking = EngineConfiguration(rawValue: 1 << 2)
public static let enableEnvironmentLightEstimation = EngineConfiguration(rawValue: 1 << 3)
public static let enableFloorLevelDetection = EngineConfiguration(rawValue: 1 << 4)
}
}
Но это не работает, когда я пытаюсь проверить, есть ли опция в данном наборе, используя .contains()
- он показывает:
'AugmentedRealityViewARKit.EngineConfiguration 'требует, чтобы типы' AugmentedRealityViewARKit.EngineConfiguration 'и' AugmentedRealityViewSceneKit.EngineConfiguration 'были эквивалентны для использования' содержит '
Пример игровой площадки:
import UIKit
public class EngineConfigurationA: OptionSet {
public static let enableSun = EngineConfigurationA(rawValue: 1 << 0)
public static let enableFloor = EngineConfigurationA(rawValue: 1 << 1)
public var rawValue: Int
required public init(rawValue: RawValue) {
self.rawValue = rawValue
}
}
public class EngineConfigurationB: EngineConfigurationA {
public static let enableWorldTracking = EngineConfigurationB(rawValue: 1 << 2)
public static let enableEnvironmentLightEstimation = EngineConfigurationB(rawValue: 1 << 3)
public static let enableFloorLevelDetection = EngineConfigurationB(rawValue: 1 << 4)
}
let optionsB: EngineConfigurationB = [EngineConfigurationB.enableWorldTracking, EngineConfigurationA.enableSun]
let contains = optionsB.contains(EngineConfigurationB.enableWorldTracking)