mirror of
https://github.com/home-assistant/iOS.git
synced 2026-04-12 05:08:23 -05:00
<!-- Thank you for submitting a Pull Request and helping to improve Home Assistant. Please complete the following sections to help the processing and review of your changes. Please do not delete anything from this template. --> ## Summary <!-- Provide a brief summary of the changes you have made and most importantly what they aim to achieve --> Drop support for iOS 12 and 13. ## Screenshots <!-- If this is a user-facing change not in the frontend, please include screenshots in light and dark mode. --> ## Link to pull request in Documentation repository <!-- Pull requests that add, change or remove functionality must have a corresponding pull request in the Companion App Documentation repository (https://github.com/home-assistant/companion.home-assistant). Please add the number of this pull request after the "#" --> Documentation: home-assistant/companion.home-assistant# ## Any other notes <!-- If there is any other information of note, like if this Pull Request is part of a bigger change, please include it here. -->
39 lines
1.2 KiB
Swift
39 lines
1.2 KiB
Swift
import CoreLocation
|
|
import Foundation
|
|
|
|
/// Wraps CLRegion but does deep inspection of properties
|
|
/// so changing e.g. lat/long breaks Equatable rather than relying on identifier
|
|
struct ZoneManagerEquatableRegion: Hashable {
|
|
let region: CLRegion
|
|
|
|
private var beaconRegion: CLBeaconRegion? {
|
|
region as? CLBeaconRegion
|
|
}
|
|
|
|
private var circularReason: CLCircularRegion? {
|
|
region as? CLCircularRegion
|
|
}
|
|
|
|
func hash(into hasher: inout Hasher) {
|
|
hasher.combine(region.hash)
|
|
}
|
|
|
|
static func == (lhs: ZoneManagerEquatableRegion, rhs: ZoneManagerEquatableRegion) -> Bool {
|
|
guard lhs.region.identifier == rhs.region.identifier else {
|
|
return false
|
|
}
|
|
|
|
if let lhs = lhs.beaconRegion, let rhs = rhs.beaconRegion {
|
|
return lhs.uuid == rhs.uuid &&
|
|
lhs.minor == rhs.minor &&
|
|
lhs.major == rhs.major
|
|
} else if let lhs = lhs.circularReason, let rhs = rhs.circularReason {
|
|
return lhs.center.latitude == rhs.center.latitude &&
|
|
lhs.center.longitude == rhs.center.longitude &&
|
|
lhs.radius == rhs.radius
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
}
|