OptionSet подкласс - возможно ли - PullRequest
0 голосов
/ 18 октября 2018

Я бы хотел создать подкласс 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...