如何在 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 4 的可解码协议中使用自定义键?

如何在 Swift 3/4 中使用相机获取位置?

如何在 Swift 3 中使用 Alamofire 4 解析这个 json?

如何在 Swift 4 中使用 FetchedResultsController 获取 DateSectionTitles