- 增加了wrapper处理原生app的交互
This commit is contained in:
180
wrappers/ios/Sources/DuooomiBleWrapper/DuooomiBleModels.swift
Normal file
180
wrappers/ios/Sources/DuooomiBleWrapper/DuooomiBleModels.swift
Normal file
@@ -0,0 +1,180 @@
|
||||
import Foundation
|
||||
|
||||
/// 扫描阶段发现的设备摘要信息。
|
||||
public struct DuooomiDiscoveredDevice {
|
||||
/// 设备唯一标识。
|
||||
public let id: String
|
||||
/// 设备名称,可能为空。
|
||||
public let name: String?
|
||||
/// 信号强度,可能为空。
|
||||
public let rssi: Int?
|
||||
|
||||
init(dictionary: [String: Any]) throws {
|
||||
self.id = try DuooomiBleValueDecoder.requiredString(dictionary, key: "id")
|
||||
self.name = DuooomiBleValueDecoder.optionalString(dictionary, key: "name")
|
||||
self.rssi = DuooomiBleValueDecoder.optionalInt(dictionary, key: "rssi")
|
||||
}
|
||||
}
|
||||
|
||||
/// 设备连接结果摘要。
|
||||
public struct DuooomiConnectedDevice {
|
||||
/// 设备唯一标识。
|
||||
public let id: String
|
||||
/// 设备名称,可能为空。
|
||||
public let name: String?
|
||||
|
||||
init(dictionary: [String: Any?]) throws {
|
||||
self.id = try DuooomiBleValueDecoder.requiredString(dictionary, key: "id")
|
||||
self.name = DuooomiBleValueDecoder.optionalString(dictionary, key: "name")
|
||||
}
|
||||
}
|
||||
|
||||
/// 设备详细信息。
|
||||
public struct DuooomiDeviceInfo {
|
||||
/// 总存储空间,字符串表示以避免跨桥数值精度问题。
|
||||
public let allspace: String
|
||||
/// 可用存储空间,字符串表示以避免跨桥数值精度问题。
|
||||
public let freespace: String
|
||||
/// 设备名称。
|
||||
public let name: String
|
||||
/// 设备分辨率,例如 `360x360`。
|
||||
public let size: String
|
||||
/// 品牌名。
|
||||
public let brand: String
|
||||
/// 电量百分比,范围 `0...100`。
|
||||
public let powerlevel: Int
|
||||
|
||||
init(dictionary: [String: Any?]) throws {
|
||||
self.allspace = try DuooomiBleValueDecoder.requiredString(dictionary, key: "allspace")
|
||||
self.freespace = try DuooomiBleValueDecoder.requiredString(dictionary, key: "freespace")
|
||||
self.name = try DuooomiBleValueDecoder.requiredString(dictionary, key: "name")
|
||||
self.size = try DuooomiBleValueDecoder.requiredString(dictionary, key: "size")
|
||||
self.brand = try DuooomiBleValueDecoder.requiredString(dictionary, key: "brand")
|
||||
self.powerlevel = try DuooomiBleValueDecoder.requiredInt(dictionary, key: "powerlevel")
|
||||
}
|
||||
}
|
||||
|
||||
/// 设备版本信息。
|
||||
public struct DuooomiVersionInfo {
|
||||
/// 固件版本号。
|
||||
public let version: String
|
||||
/// 协议返回的版本类型字段。
|
||||
public let type: String
|
||||
|
||||
init(dictionary: [String: Any?]) throws {
|
||||
self.version = try DuooomiBleValueDecoder.requiredString(dictionary, key: "version")
|
||||
self.type = try DuooomiBleValueDecoder.requiredString(dictionary, key: "type")
|
||||
}
|
||||
}
|
||||
|
||||
/// 绑定结果信息。
|
||||
public struct DuooomiBindingResult {
|
||||
/// 协议类型。
|
||||
public let type: Int
|
||||
/// 设备 SN。
|
||||
public let sn: String
|
||||
/// 绑定结果,`1` 表示成功。
|
||||
public let success: Int
|
||||
/// 已存在内容列表。
|
||||
public let contents: [String]
|
||||
|
||||
init(dictionary: [String: Any?]) throws {
|
||||
self.type = try DuooomiBleValueDecoder.requiredInt(dictionary, key: "type")
|
||||
self.sn = try DuooomiBleValueDecoder.requiredString(dictionary, key: "sn")
|
||||
self.success = try DuooomiBleValueDecoder.requiredInt(dictionary, key: "success")
|
||||
self.contents = DuooomiBleValueDecoder.stringArray(dictionary, key: "contents")
|
||||
}
|
||||
}
|
||||
|
||||
/// 解绑结果信息。
|
||||
public struct DuooomiUnbindResult {
|
||||
/// 解绑结果,`1` 表示成功。
|
||||
public let success: Int
|
||||
|
||||
init(dictionary: [String: Any?]) throws {
|
||||
self.success = try DuooomiBleValueDecoder.requiredInt(dictionary, key: "success")
|
||||
}
|
||||
}
|
||||
|
||||
/// 删除文件结果信息。
|
||||
public struct DuooomiDeleteFileResult {
|
||||
/// 协议类型。
|
||||
public let type: Int
|
||||
/// 删除结果,`0` 成功,`1` 失败,`2` 文件不存在。
|
||||
public let success: Int
|
||||
|
||||
init(dictionary: [String: Any?]) throws {
|
||||
self.type = try DuooomiBleValueDecoder.requiredInt(dictionary, key: "type")
|
||||
self.success = try DuooomiBleValueDecoder.requiredInt(dictionary, key: "success")
|
||||
}
|
||||
}
|
||||
|
||||
/// 通用布尔完成结果。
|
||||
public struct DuooomiCommandResult {
|
||||
/// 是否执行成功。
|
||||
public let success: Bool
|
||||
|
||||
init(dictionary: [String: Any?]) throws {
|
||||
self.success = try DuooomiBleValueDecoder.requiredBool(dictionary, key: "success")
|
||||
}
|
||||
}
|
||||
|
||||
enum DuooomiBleValueDecoder {
|
||||
static func requiredString(_ dictionary: [String: Any?], key: String) throws -> String {
|
||||
if let value = optionalString(dictionary, key: key) {
|
||||
return value
|
||||
}
|
||||
throw DuooomiBleManagerError(message: "Missing string value for key: \(key)")
|
||||
}
|
||||
|
||||
static func optionalString(_ dictionary: [String: Any?], key: String) -> String? {
|
||||
if let value = dictionary[key] as? String {
|
||||
return value
|
||||
}
|
||||
|
||||
if let value = dictionary[key] as? NSNumber {
|
||||
return value.stringValue
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
static func requiredInt(_ dictionary: [String: Any?], key: String) throws -> Int {
|
||||
if let value = optionalInt(dictionary, key: key) {
|
||||
return value
|
||||
}
|
||||
throw DuooomiBleManagerError(message: "Missing integer value for key: \(key)")
|
||||
}
|
||||
|
||||
static func optionalInt(_ dictionary: [String: Any?], key: String) -> Int? {
|
||||
if let value = dictionary[key] as? Int {
|
||||
return value
|
||||
}
|
||||
|
||||
if let value = dictionary[key] as? NSNumber {
|
||||
return value.intValue
|
||||
}
|
||||
|
||||
if let value = dictionary[key] as? String {
|
||||
return Int(value)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
static func requiredBool(_ dictionary: [String: Any?], key: String) throws -> Bool {
|
||||
if let value = dictionary[key] as? Bool {
|
||||
return value
|
||||
}
|
||||
|
||||
if let value = dictionary[key] as? NSNumber {
|
||||
return value.boolValue
|
||||
}
|
||||
|
||||
throw DuooomiBleManagerError(message: "Missing boolean value for key: \(key)")
|
||||
}
|
||||
|
||||
static func stringArray(_ dictionary: [String: Any?], key: String) -> [String] {
|
||||
(dictionary[key] as? [String]) ?? []
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user