[英]HMHomeManager returning nil
我正在基於 HomeKit 創建我自己的“HouseKit”。 這個 api 將允許我非常快速地執行 homekit 操作,例如 light.on()。
按照我的解釋,然后在這里介紹我的問題,這是我的燈光管理公共課程的示例。 這工作正常。
public class AIALight: AIAEquipment {
// MARK: - Initialization
public init(kind: Kind, name: String) {
super.init(.light, equipmentName: name)
}
}
extension AIALight: AIAControllable {
public enum Order: AIAOrder {
// MARK: - Values
case on
case off
var info: (Int) {
switch self {
case .on:
return 1
case .off:
return 0
}
}
}
}
然后創建一個光...
var myLight = AIALight(kind: .light, name: "Sdb1")
...並在需要時發送訂單:
self.myLight.set(.on, completion: nil)
好的,現在保持相同的想法,我希望能夠創建房屋和房間。 對於家庭 HMHomeManagerDelegate,當然還有 HMHomeManager。
這是我創建 Home 的完整類:
import Foundation
import HomeKit
public final class AIAHouse: HMHome, HMHomeManagerDelegate {
public var house: HMHome!
public let houseName: String
public var manager: HMHomeManager? {
didSet {
self.manager?.delegate = self
}
}
// MARK: - Initialization
public init(houseName: String) {
self.manager = nil
self.houseName = houseName
}
public func homeManagerDidUpdateHomes(_ manager: HMHomeManager) {
//We browse HMHome to find CruzHouse already set via Home App on iOS
for home in manager.homes as [HMHome]{
if home.name == self.houseName{
print("Found the expected home: \(self.houseName) 🏠")
self.house = home
}
else {
print("\(self.houseName) not found 🛑")
}
}
}
}
然后在我的 ViewController 中:
var homeManager: HMHomeManager!
var myHome: AIAHouse!
override func viewDidLoad() {
super.viewDidLoad()
self.homeManager = HMHomeManager()
self.myHome = AIAHouse(houseName: "MyHome")
self.myHome.manager = HMHomeManager()
}
我的問題是self.myHome.manager = HMHomeManager()
返回 nil,我不明白為什么真的......知道嗎? 非常感謝!
從蘋果文檔:
你不直接創建家園-相反,你建立他們與
addHome(withName:completionHandler:)
的方法HMHomeManager
。
如果您的AIAHouse
對象繼承自NSObject
而不是HMHome
您的代碼將被編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.