Swift中HomeKist发现和管理支持HomeKit的配件(五)

如果我们想打开灯,或者别的控件,首先需要找到改控件,根据该控件找到该控件的服务,根据服务找到该控件的特征,根据特征的描述打开或者关闭该灯,这里只写到特征,控制特征参考下一篇

import UIKit
import HomeKit

class ViewController: UIViewController,HMHomeManagerDelegate,HMAccessoryBrowserDelegate{

    @IBOutlet weak var tableView: UITableView?
    var manager: HMHomeManager!
    /*HMAccessory控件,具体到冰箱,洗衣机,空调*/
    var accessories = [HMAccessory]()
    /*HMAccessoryBrowser查找控件的类,*/
    lazy var accessoryBrower:HMAccessoryBrowser = {
        let brower = HMAccessoryBrowser()
        brower.delegate = self
        return brower
    }()
    var home:HMHome!
    var room:HMRoom!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.manager = HMHomeManager()
        self.manager?.delegate = self;
    }
    //homekit初始化完毕
    public func homeManagerDidUpdateHomes(_ manager: HMHomeManager){
        home = self.manager.homes[0]
        room = home.rooms[0]
        //开始查找配件,支持HomeKit
        self.accessoryBrower.startSearchingForNewAccessories()
    }

    //发现一个新的配件  HMAccessoryBrowserDelegate
    public func accessoryBrowser(_ browser: HMAccessoryBrowser, didFindNewAccessory accessory: HMAccessory){
        print("-------------\(accessory.name)")
        home.addAccessory(accessory) {[weak self] (error) in
            let strongSelf = self!
            if error == nil{
                print("添加控件成功")
                strongSelf.home.assignAccessory(accessory, to: strongSelf.room, completionHandler: { (error) in
                    if error == nil{
                        print("把控件添加房间成功")
                        strongSelf.findServicesForAccessort(accessory: accessory)
                    }else{
                         print("把控件添加房间失败")
                    }
                })
            }else{
               print("添加控件失败")
            }
        }

    }
    //移除一个新的配件  HMAccessoryBrowserDelegate
    public func accessoryBrowser(_ browser: HMAccessoryBrowser, didRemoveNewAccessory accessory: HMAccessory){

    }

    func findServicesForAccessort(accessory:HMAccessory){
        print("发现服务")
        for service in accessory.services as [HMService]{
            print("--------service name:\(service.name)  type:\(service.serviceType)")
            //找到服务,遍历服务的特征
            findCharacteristicsOfService(service: service)
        }
    }
    func findCharacteristicsOfService(service:HMService){
        for characteristic in service.characteristics as [HMCharacteristic]{
            print("???????????????????? characteristic type:\(characteristic.characteristicType)")
        }
    }
}

原文地址:https://www.cnblogs.com/hualuoshuijia/p/12017463.html

时间: 2024-10-14 07:23:38

Swift中HomeKist发现和管理支持HomeKit的配件(五)的相关文章

Swift中使用构建配置来支持条件编译-b

在Objective-C中,我们经常使用预处理指令来帮助我们根据不同的平台执行不同的代码,以让我们的代码支持不同的平台,如: 1 2 3 4 5 6 7 8 9 #if TARGET_OS_IPHONE     #define MAS_VIEW UIView              #elif TARGET_OS_MAC     #define MAS_VIEW NSView #endif 在swift中,由于对C语言支持没有Objective-C来得那么友好(暂时不知swift 2到C的支持

Swift中利用单例管理FMDB数据库

1.进入短信界面 2.菜单-设置 3.修改短信中心号码(Set the SIM's smsc number) 保存 [测试结果]:提示保存成功,但是号码没有改变,退出重新进入设置才会看到号码更新 [预期结果]:提示保存成功,号码变为修改过的号码 相关Activity:通过Logcat中I/ActivityManager( 896):我们可以定位到该类-MessagingPreferenceActivity: 相关控件:mSmscPrefList.add(pref); 根据分析我们发现在Messa

在 Swift 中实现 NS_OPTIONS

从Xcode 4.5以后,我们在Objective-C中使用NS_ENUM和NS_OPTIONS来定义一个枚举,以替代C语言枚举的定义方式.其中NS_ENUM用于定义普通的枚举,NS_OPTIONS用于定义选项类型的枚举. 而到了Swift中,枚举增加了更多的特性.它可以包含原始类型(不再局限于整型)以及相关值.正是由于这些原因,枚举在Swift中得到了更广泛的应用.在Foundation中,Objective-C中的NS_ENUM类型的枚举,都会自动转换成Swift中enum,并且更加精炼.以

NS_OPTIONS在swift中怎么实现?

今天在一个ios培训网站上看到一篇博客,讲的是在NS_OPTIONS在Swift中的实现,写得还算比较深刻全面,小编对其进行整理后,分享出来,希望对大家在iOS应用开发上有所帮助吧. 在iOS开发中,我们常常需要定义一个枚举,以替代C语言枚举的定义方式,常用的方法就是在Objective-C中使用NS_ENUM和NS_OPTIONS.其中,NS_ENUM用于定义普通的枚举,NS_OPTIONS用于定义选项类型的枚举. 不同于Objective-C语言,Swift中的枚举增加了更多特性,它可以包含

浅谈swift中的内存管理

Swift使用自动引用计数(ARC(Automatic Reference Count))来管理应用程序的内存使用.这表示内存管理已经是Swift的一部分,在大多数情况下,你并不需要考虑内存的管理.当实例并不再被需要时,ARC会自动释放这些实例所使用的内存. 内存管理:针对的是实例的内存占用的管理(放在堆里面) 实例:1:由class类型构建的实例,2:闭包对象 下面我们来写一个实例来证明一下 class Person { var name: String init(name: String )

idea中,发现某个java语法在低版本中不支持时的解决办法

比如,在某个工程中,准备用java.util.Objects#equals语法,发现提示版本不支持. F4查看Module的配置,发现原来是1.6版本. 当我手动修改为1.8时,提示我:Module是在maven配置的java版本. 于是,去pom文件中,发现是spring boot的默认starter是java 1.6 . <parent> <groupId>org.springframework.boot</groupId> <artifactId>sp

Swift中编写单例的正确方式

Swift中编写单例的正确方式 2015-12-07 10:23 编辑: yunpeng.hu 分类:Swift 来源:CocoaChina翻译活动 14 10647 Objective-CSwift单例 招聘信息: Cocos2d-x 工程师 cocos2dx手游客户端主程 wp开发 iOS开发工程师 iOS软件工程师 iOS研发工程师 iOS讲师 iOS开发工程师 iOS高级开发工程师 iOS 高级软件工程师 iOS高级开发工程师 本文由CocoaChina译者leon(社区ID)翻译自kr

Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其他一些编程语言中的 lambdas 比较相似。

闭包是功能性自包含模块,可以在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其他一些编程语言中的 lambdas 比较相似. 闭包可以 捕获 和存储其所在上下文中任意常量和变量的引用. 这就是所谓的闭合并包裹着这些常量和变量,俗称闭包.Swift会为您管理在 捕获 过程中涉及到的内存操作. 注意:如果您不熟悉 捕获 (capturing) 这个概念也不用担心,后面会详细对其进行介绍. 在Swift函数章节中介绍的全局和嵌套函数实际上也是特殊的

怎样在Swift中使用CocoaPods

怎样在Swift中使用CocoaPods 它不是神秘的亚马逊区域的部落人用手捡出来的生可可的豆荚,肯定不是!让CocoaPods website来回答可能是最好的: CocoaPods是Cocoa项目的依赖管理工具.它有上千个能帮你优雅地扩充自己项目的库. 优雅地扩展项目听起来很令人好奇,但是什么是依赖管理工具呢?你为什么会需要它呢? 无论你正在创建一个什么样的app,你都有可能会用到别的开发者的代码,无论是以框架的形式还是库的形式.你可能很熟悉UIKit和Foundation,这两个都是苹果提