Files
iOS/Sources/App/ZoneManager/ZoneManagerEquatableRegion.swift
Bruno Pantaleão Gonçalves e9c85b3f7a Drop iOS 12, 13 and 14 support (#2469)
<!-- 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. -->
2023-12-27 16:50:11 +01:00

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
}
}
}