Как я могу ограничить перечисление только теми, кто принимает протокол, что, в свою очередь, зависит от этого перечисления? - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь ограничить видимость перечисления Taptic, объявленного в том же файле, что и протокол, только теми файлами, которые принимают протокол. Прямо сейчас любой файл может «видеть» перечисление. Я пробовал комбинацию изменения enum или модификатора доступа case на fileprivate, но они не разрешены. Я также попытался объявить перечисление как таковое enum Taptic: UInt 32 where Self: Vibratable' {, но это не правильный синтаксис. Есть указатель?

import UIKit
import AudioToolbox

enum Taptic: UInt32 {
    case Peek = 1519
    case Pop = 1520
    case Nope = 1521
}

protocol Vibratable {
    var tapticLevel: Int { get }
    func vibrateDevice(forHigherThan6s: UIImpactFeedbackStyle, for6s: Taptic, lowerThan6s: SystemSoundID)
}

extension Vibratable {
    var tapticLevel: Int {
        return UIDevice.current.value(forKey: "_feedbackSupportLevel") as! Int
    }
    func vibrateDevice(forHigherThan6s: UIImpactFeedbackStyle = .medium, for6s: Taptic = .Peek, lowerThan6s: SystemSoundID = kSystemSoundID_Vibrate) {
        switch tapticLevel {
        case 2:
            let generator = UIImpactFeedbackGenerator(style: forHigherThan6s)
            generator.prepare()
            generator.impactOccurred()
        case 1:
            AudioServicesPlaySystemSound(for6s.rawValue)
        default:
            AudioServicesPlaySystemSound(lowerThan6s)
        }
    }
}
...