如何在 Swift 4 中使用 respondsToSelector 验证来自 HomeKit 的值的方法字节
Posted
技术标签:
【中文标题】如何在 Swift 4 中使用 respondsToSelector 验证来自 HomeKit 的值的方法字节【英文标题】:How to validate method bytes using respondsToSelector for value from HomeKit in Swift 4 【发布时间】:2018-05-18 06:18:51 【问题描述】:下面是我要转换成 Swift 4 的代码, 我可以看到 respondsToSelector: 在 Swift 4 中不可用
以下是运行良好的 Objective-c 代码:
-(id)getValueFromHomeKitValue:(id)homeKitValue
if ( [homeKitValue respondsToSelector:@selector(bytes)] )
NSData * data = (NSData *) homeKitValue;
uint64_t value = *(uint8_t*)[homeKitValue bytes];
return value;
【问题讨论】:
【参考方案1】: func getValueFromHomeKitValue(_ homeKitValue: Any?) -> Any?
if homeKitValue?.responds(to: #selector(self.bytes)) ?? false
let data = homeKitValue as? Data
return UInt8(homeKitValue?.bytes())
【讨论】:
我相信 'Any' 类型的值在 Swift 4 中没有成员 'responds'。尝试使用您的解决方案引发错误 你能解释一下你的用例吗?我会尝试做相应的 我会在 HomeKit 配对时从 HomeKit 委托中获得价值。 1. 需要检查 value 是否有 bytes 方法 2.if 转换为 Data 类型并赋值给 uint64_t value = (uint8_t)[homeKitValue bytes]; 从字节到 UInt64 的转换在 Swift4 中是不同的,我无法实现以上是关于如何在 Swift 4 中使用 respondsToSelector 验证来自 HomeKit 的值的方法字节的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift 4 中使用 UnsafeMutablePointer
Swift 4:如何使用 Alamofire 在参数中发布文件?
如何在 Swift 3 中使用 Alamofire 4 解析这个 json?
如何在 Swift 4 中使用 FetchedResultsController 获取 DateSectionTitles