我想做的是将与协议相同的文件中声明的Taptic
枚举的可见性限制为仅采用该协议的那些文件。现在,任何文件都可以“查看”枚举。我尝试了将枚举或案例的访问修饰符更改为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)
}
}
}