首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较HMAccessory实例

如何比较HMAccessory实例
EN

Stack Overflow用户
提问于 2015-12-01 21:13:15
回答 3查看 414关注 0票数 1

自iOS9以来,HMAccessoryidentifier属性一直在贬值。有另外一种方法来比较HMAccessory的两个不同实例吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-02 16:54:48

在HMAccessory 9中确定iOS 9的新方法是使用

代码语言:javascript
复制
@available(iOS 9.0, *)
@NSCopying public var uniqueIdentifier: NSUUID { get }
票数 4
EN

Stack Overflow用户

发布于 2015-12-03 04:12:00

有几种方法可以做到这一点。正如@Maria所提到的,从iOS9开始,您就拥有NSUUID属性'uniqueIdentifier':

代码语言:javascript
复制
@property(readonly, copy, nonatomic) NSUUID *uniqueIdentifier NS_AVAILABLE_IOS(9_0);

另外,您可以使用serialNumber characteristicType来比较HMAccessories,但是要记住:您应该检查附件“可达性”和“阻塞”状态。如果附件无法到达或被阻塞,那么您可能无法读取序列号。

最后,我在目标C中包含了一个实用程序代码片段(想要Swift吗?(只需问一句,或者更好地说,用它作为练习;)

/** @discussion:如果附件不可访问,则返回空字符串。无法获取无法到达的实际序列号。* */

如果您正在粘贴此,请引用

代码语言:javascript
复制
+ (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 @"";
}
票数 0
EN

Stack Overflow用户

发布于 2015-12-01 21:45:28

好的想出了一个解决方案。这里有一个HMCharaceteristic HMCharaceteristicTypeSerialNumber。对HMAccessory作了扩展

代码语言:javascript
复制
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
  }
 }
}

现在可以比较:

代码语言:javascript
复制
accessory1.serialNumber == accessory2.serialNumber

还有其他解决办法吗?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34030274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档