由于iOS9的identifier
属性HMAccessory
已被折旧。是否有另一种方法来比较两个不同的HMAccessory实例?如何比较HMAccessory的实例
回答
新办法确定的iOS 9 HMAccessory是使用
@available(iOS 9.0, *)
@NSCopying public var uniqueIdentifier: NSUUID { get }
好吧想出了一个解决方案。有一个HMCharaceteristic
HMCharaceteristicTypeSerialNumber
。做一个扩展HMAccessory
:
extension HMAccessory {
var serialNumber: String? {
get {
for service in services {
for characteristic in service.characteristics {
if characteristic.characteristicType == HMCharacteristicTypeSerialNumber {
return characteristic.value as? String
}
}
}
return nil
}
}
}
现在可以比较:
accessory1.serialNumber == accessory2.serialNumber
任何其他解决办法?
1.检查附件“可达性”和“封锁”状态。 2. serialNumber的类型是NSString。使用NSString可比性检查:“isEqualToString”而不是“==”,你是这样倾向于这样做。 –
有几种方法可以做到这一点。作为@Maria提到,从iOS9起,你有NSUUID财产“唯一标识符”:
@property(readonly, copy, nonatomic) NSUUID *uniqueIdentifier NS_AVAILABLE_IOS(9_0);
此外,您还可以利用SERIALNUMBER characteristicType比较HMAccessories,但是,请记住:你应该检查配件'可达性“和”阻塞“状态。如果附件不可用或被阻塞,则可能无法读取序列号。
最后,我已经包括在目标C的实用程序代码片段(希望斯威夫特只问,或者更好,用它作为一个练习;?)):
/** @discussion:返回空字符串,如果附件无法访问。 无法提取可达状态的实际序列号。* */
[请举出如果粘贴此]
+ (NSString *)getSerialNumberFromHMAccessory:(HMAccessory *)accessory {
if (!accessory || !accessory.reachable || accessory.isBlocked) {
return @"";
}
for (HMService *service in accessory.services) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@", @"characteristicType", HMCharacteristicTypeSerialNumber];
NSArray *result = [service.characteristics filteredArrayUsingPredicate:predicate];
if (result && [result count] > 0 && [result[0] isKindOfClass:[HMCharacteristic class]]) {
HMCharacteristic *serialNumChar = (HMCharacteristic *)result[0];
NSString *serialNum = [serialNumChar valueForKey:@"value"];
if (serialNum && [serialNum length] > 0) {
//DDLogInfo(@"Found serial number: %@ for accessory named \"%@\"", serialNum, accessory.name);
return serialNum;
}
}
}
return @"";
}
你的回答可能没有帮助@Christian R,但它使我的一天。 我正在寻找一种方法来检索homekit安装后的mac地址! –
- 1. 如何比较UITextField的实例
- 2. 如何比较FieldInfo的实例值?
- 3. 比较UIViewController实例
- 4. Sitecore比较实例
- 5. 如何比较协议的实例和类的实例
- 6. 如何比较两个AssemblyName实例?
- 7. 可比较的Java实例
- 8. Java的比较类实例
- 9. 比较两个RouteValueDictionary实例
- 10. 非实例化的加载的Prefab如何与实例化的比较?
- 11. 检索公司名称由HMService和/或HMAccessory对象实例
- 12. Tcl:比较一个类的实例
- 13. 比较f#中的c#实例对象#
- 14. 比较整数,类实例的数组
- 15. 比较实例变量的相等性
- 16. 在swift中比较UITableView的实例
- 17. 如何比较同一类的不同实例中的变量?
- 18. 如何比较Silverlight中System.Text.Encoding的两个实例?
- 19. 如何在C#中比较两个实例的内容?
- 20. 比较例外
- 21. 比较类类型没有实例
- 22. Java GSSAPI:比较两个GSSCredential实例
- 23. 使用MD5/SHA1比较XML实例
- 24. 使用DateTime实例比较2次
- 25. 比较实例或相同UIViewController类
- 26. 比较CLLocationDistance的两个实例来缩小较小的一个
- 27. 如何比较两个枚举实例与NO原始类型?
- 28. 如何比较JSON对象和Waterline模型实例?
- 29. 如何比较不同的实现java.security.cert.X509Certificate
- 30. 如何实现hadoop的组比较器?
感谢您解决这个问题。在线文档中没有提及此属性的原因是什么? –