我正在尝试为复杂的场景实现一个简单的 API。我有一种异步检索数据的类型(实际上是蓝牙设备)。所以我试图最终得到的 API 是这样的:
peripheral.requestData(.Temperature) { value: Double in
print(value)
}
我从这篇了不起的文章中得到了一些好主意,所以这就是我试图实现上述目标的目的:
class MyPeripheral {
class Keys {
static let Temperature = PeripheralKey<Double>("Temperature")
static let UserData = PeripheralKey<[String: String]>("UserData")
}
func requestData(service: Keys, handler: (value: ???Get ValueType from PeripheralKey???) -> Void) {
if let service = service as? PeripheralKey<Int> {
service.key //Do something
} else if let service = service as? PeripheralKey<[String: String]>
//Do something else
}
}
}
class PeripheralKey<ValueType>: MyPeripheral.Keys {
let key: String
init(_ key: String) {
self.key = key
}
}
我遇到了返回的闭包类型的问题。我想根据传入的外围泛型类型键进行强类型化,但无法掌握如何做到这一点,或者可能需要不同的方法?任何帮助或方向将不胜感激!