pub struct HMHome { /* private fields */ }HMHome only.Expand description
Represents a home.
This class represents a home and is the entry point to communicate and configure different accessories in the home. This is also used to manage all the rooms, zones, service groups, users, triggers, and action sets in the home.
See also Apple’s documentation
Implementations§
Source§impl HMHome
impl HMHome
pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>
Sourcepub unsafe fn delegate(
&self,
) -> Option<Retained<ProtocolObject<dyn HMHomeDelegate>>>
pub unsafe fn delegate( &self, ) -> Option<Retained<ProtocolObject<dyn HMHomeDelegate>>>
Delegate that receives updates on the state of the home.
This property is not atomic.
§Safety
This might not be thread-safe.
Sourcepub unsafe fn setDelegate(
&self,
delegate: Option<&ProtocolObject<dyn HMHomeDelegate>>,
)
pub unsafe fn setDelegate( &self, delegate: Option<&ProtocolObject<dyn HMHomeDelegate>>, )
Sourcepub unsafe fn isPrimary(&self) -> bool
pub unsafe fn isPrimary(&self) -> bool
Specifies whether this home is the primary home.
This property is not atomic.
§Safety
This might not be thread-safe.
Sourcepub unsafe fn homeHubState(&self) -> HMHomeHubState
pub unsafe fn homeHubState(&self) -> HMHomeHubState
Specifies the state of the home hub.
This property is not atomic.
§Safety
This might not be thread-safe.
Sourcepub unsafe fn uniqueIdentifier(&self) -> Retained<NSUUID>
pub unsafe fn uniqueIdentifier(&self) -> Retained<NSUUID>
A unique identifier for the home.
This property is not atomic.
§Safety
This might not be thread-safe.
Sourcepub unsafe fn updateName_completionHandler(
&self,
name: &NSString,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate feature block2 only.
pub unsafe fn updateName_completionHandler( &self, name: &NSString, completion: &DynBlock<dyn Fn(*mut NSError)>, )
block2 only.This method is used to change the name of the home.
Parameter name: New name for the home.
Parameter completion: Block that is invoked once the request is processed.
The NSError provides more information on the status of the request, error
will be nil on success.
Source§impl HMHome
HMAccessory.
impl HMHome
HMAccessory.
Sourcepub unsafe fn accessories(&self) -> Retained<NSArray<HMAccessory>>
Available on crate feature HMAccessory only.
pub unsafe fn accessories(&self) -> Retained<NSArray<HMAccessory>>
HMAccessory only.Array of HMAccessory objects that represents all accessories added to the home.
This property is not atomic.
§Safety
This might not be thread-safe.
Sourcepub unsafe fn addAccessory_completionHandler(
&self,
accessory: &HMAccessory,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate features HMAccessory and block2 only.
pub unsafe fn addAccessory_completionHandler( &self, accessory: &HMAccessory, completion: &DynBlock<dyn Fn(*mut NSError)>, )
HMAccessory and block2 only.Adds a new accessory to the home.
Parameter accessory: Accessory to add to the home.
Parameter completion: Block that is invoked once the request is processed.
The NSError provides more information on the status of the request, error
will be nil on success.
Sourcepub unsafe fn removeAccessory_completionHandler(
&self,
accessory: &HMAccessory,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate features HMAccessory and block2 only.
pub unsafe fn removeAccessory_completionHandler( &self, accessory: &HMAccessory, completion: &DynBlock<dyn Fn(*mut NSError)>, )
HMAccessory and block2 only.Removes an accessory from the home.
Parameter accessory: Accessory to remove from the home.
Parameter completion: Block that is invoked once the request is processed.
The NSError provides more information on the status of the request, error
will be nil on success.
Sourcepub unsafe fn assignAccessory_toRoom_completionHandler(
&self,
accessory: &HMAccessory,
room: &HMRoom,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate features HMAccessory and HMRoom and block2 only.
pub unsafe fn assignAccessory_toRoom_completionHandler( &self, accessory: &HMAccessory, room: &HMRoom, completion: &DynBlock<dyn Fn(*mut NSError)>, )
HMAccessory and HMRoom and block2 only.Assigns a new room for the accessory.
When an accessory is added to a home, it is automatically assigned the room corresponding to
- [HMHome roomForEntireHome]. This method is used to change the room assigned to an accessory.
Parameter accessory: Accessory whose rooms needs to modified
Parameter room: New room for the accessory.
Parameter completion: Block that is invoked once the request is processed.
The NSError provides more information on the status of the request, error
will be nil on success.
Sourcepub unsafe fn servicesWithTypes(
&self,
service_types: &NSArray<NSString>,
) -> Option<Retained<NSArray<HMService>>>
Available on crate feature HMService only.
pub unsafe fn servicesWithTypes( &self, service_types: &NSArray<NSString>, ) -> Option<Retained<NSArray<HMService>>>
HMService only.Queries all services that match the specified types.
Parameter serviceTypes: Array of NSString objects that specifies the service types to match.
Returns: Array of HMService objects that match the specified service types, nil if no matching services were found.
Sourcepub unsafe fn unblockAccessory_completionHandler(
&self,
accessory: &HMAccessory,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate features HMAccessory and block2 only.
pub unsafe fn unblockAccessory_completionHandler( &self, accessory: &HMAccessory, completion: &DynBlock<dyn Fn(*mut NSError)>, )
HMAccessory and block2 only.unblock a blocked accessory.
A misbehaving accessory will automatically be blocked. After that all requests to the accessory will fail. This API must be used to explicitly unblock the accessory
Parameter accessory: accessory to be unblocked
Parameter completion: Block that is invoked once the request is processed.
The NSError provides more information on the status of the request, error
will be nil on success.
Sourcepub unsafe fn addAndSetupAccessoriesWithCompletionHandler(
&self,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
👎Deprecated: Use -[HMAccessorySetupManager performAccessorySetupUsingRequest:completionHandler:] insteadAvailable on crate feature block2 only.
pub unsafe fn addAndSetupAccessoriesWithCompletionHandler( &self, completion: &DynBlock<dyn Fn(*mut NSError)>, )
block2 only.Find nearby accessories and add them to the home. During this process, each of the accessories added to the home is assigned to a room and its services are configured.
Parameter completion: Block that is invoked once the request is processed.
The NSError provides more information on the status of the request, error
will be nil on success.
Sourcepub unsafe fn addAndSetupAccessoriesWithPayload_completionHandler(
&self,
payload: &HMAccessorySetupPayload,
completion: &DynBlock<dyn Fn(*mut NSArray<HMAccessory>, *mut NSError)>,
)
👎Deprecated: Use -[HMAccessorySetupManager performAccessorySetupUsingRequest:completionHandler:] insteadAvailable on crate features HMAccessory and HMAccessorySetupPayload and block2 only.
pub unsafe fn addAndSetupAccessoriesWithPayload_completionHandler( &self, payload: &HMAccessorySetupPayload, completion: &DynBlock<dyn Fn(*mut NSArray<HMAccessory>, *mut NSError)>, )
HMAccessory and HMAccessorySetupPayload and block2 only.Add accessory with the given setup payload to the home.
Note: This SPI requires entitlement: com.apple.developer.homekit.allow-setup-payload
Parameter completion: Block that is invoked once the request is processed.
Accessories provides the list of added accessories.
The NSError provides more information on the status of the request, error
will be nil on success.
Sourcepub unsafe fn supportsAddingNetworkRouter(&self) -> bool
pub unsafe fn supportsAddingNetworkRouter(&self) -> bool
True if this home supports all of the requirements for adding a network router.
This property is not atomic.
§Safety
This might not be thread-safe.
Source§impl HMHome
HMUser.
impl HMHome
HMUser.
Sourcepub unsafe fn currentUser(&self) -> Retained<HMUser>
Available on crate feature HMUser only.
pub unsafe fn currentUser(&self) -> Retained<HMUser>
HMUser only.HMUser object representing the current user of the home.
This property is not atomic.
§Safety
This might not be thread-safe.
Sourcepub unsafe fn users(&self) -> Retained<NSArray<HMUser>>
👎Deprecated: No longer supported.Available on crate feature HMUser only.
pub unsafe fn users(&self) -> Retained<NSArray<HMUser>>
HMUser only.Array of HMUser objects that represent all users associated with the home.
This property is not atomic.
§Safety
This might not be thread-safe.
Sourcepub unsafe fn manageUsersWithCompletionHandler(
&self,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate feature block2 only.
pub unsafe fn manageUsersWithCompletionHandler( &self, completion: &DynBlock<dyn Fn(*mut NSError)>, )
block2 only.Presents a view controller to manage users of the home.
This API is available only for users that have administrator access to the home.
Parameter completion: Block that is invoked once user management is completed.
The completion block is fired to allow clients to know when the user has dismissed the view.
The NSError provides more information on the status of the request, error
will be nil on success. If the user does not have administrator privileges the error code will be set to
HMErrorCodeInsufficientPrivileges.
Sourcepub unsafe fn addUserWithCompletionHandler(
&self,
completion: &DynBlock<dyn Fn(*mut HMUser, *mut NSError)>,
)
👎DeprecatedAvailable on crate features HMUser and block2 only.
pub unsafe fn addUserWithCompletionHandler( &self, completion: &DynBlock<dyn Fn(*mut HMUser, *mut NSError)>, )
HMUser and block2 only.Adds a user to the home.
Parameter completion: Block that is invoked once the request is processed.
The HMUser object provides a reference to the user that was added to the home.
The NSError provides more information on the status of the request, error
will be nil on success. The userInfo dictionary will contain the HMUserFailedAccessoriesKey which provides
more details on the accessories that failed to add the user.
Sourcepub unsafe fn removeUser_completionHandler(
&self,
user: &HMUser,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
👎DeprecatedAvailable on crate features HMUser and block2 only.
pub unsafe fn removeUser_completionHandler( &self, user: &HMUser, completion: &DynBlock<dyn Fn(*mut NSError)>, )
HMUser and block2 only.Removes a user from the home.
Parameter user: HMUser whose access is being revoked.
Parameter completion: Block that is invoked once the request is processed.
The NSError provides more information on the status of the request, error
will be nil on success. The userInfo dictionary will contain the HMUserFailedAccessoriesKey which provides
more details on the accessories that failed to remove the user.
Sourcepub unsafe fn homeAccessControlForUser(
&self,
user: &HMUser,
) -> Retained<HMHomeAccessControl>
Available on crate features HMAccessControl and HMHomeAccessControl and HMUser only.
pub unsafe fn homeAccessControlForUser( &self, user: &HMUser, ) -> Retained<HMHomeAccessControl>
HMAccessControl and HMHomeAccessControl and HMUser only.Retrieve the access level of the user associated with the home.
Source§impl HMHome
HMRoom.
impl HMHome
HMRoom.
Sourcepub unsafe fn rooms(&self) -> Retained<NSArray<HMRoom>>
Available on crate feature HMRoom only.
pub unsafe fn rooms(&self) -> Retained<NSArray<HMRoom>>
HMRoom only.Array of HMRoom objects that represents all rooms in the home.
This property is not atomic.
§Safety
This might not be thread-safe.
Sourcepub unsafe fn addRoomWithName_completionHandler(
&self,
room_name: &NSString,
completion: &DynBlock<dyn Fn(*mut HMRoom, *mut NSError)>,
)
Available on crate features HMRoom and block2 only.
pub unsafe fn addRoomWithName_completionHandler( &self, room_name: &NSString, completion: &DynBlock<dyn Fn(*mut HMRoom, *mut NSError)>, )
HMRoom and block2 only.Adds a room to the home.
Parameter roomName: Name of the room to add to the home.
Parameter completion: Block that is invoked once the request is processed.
The HMRoom is the new room added to the home.
The NSError provides more information on the status of the request, error
will be nil on success.
Sourcepub unsafe fn removeRoom_completionHandler(
&self,
room: &HMRoom,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate features HMRoom and block2 only.
pub unsafe fn removeRoom_completionHandler( &self, room: &HMRoom, completion: &DynBlock<dyn Fn(*mut NSError)>, )
HMRoom and block2 only.Removes a room from the home.
Any references to this room will be removed from all properties of the home. For example, the room will be removed from the zone. Any accessories associated contained by this room will be moved to the room provided by - [HMHome roomForEntireHome].
Parameter room: Room to remove from the home.
Parameter completion: Block that is invoked once the request is processed.
The NSError provides more information on the status of the request, error
will be nil on success.
Sourcepub unsafe fn roomForEntireHome(&self) -> Retained<HMRoom>
Available on crate feature HMRoom only.
pub unsafe fn roomForEntireHome(&self) -> Retained<HMRoom>
HMRoom only.This method returns a room that represents the entire home. This can be used to assign a room to a service that is not necessarily located in one particular room.
Returns: HMRoom that represents the home.
Source§impl HMHome
HMZone.
impl HMHome
HMZone.
Sourcepub unsafe fn zones(&self) -> Retained<NSArray<HMZone>>
Available on crate feature HMZone only.
pub unsafe fn zones(&self) -> Retained<NSArray<HMZone>>
HMZone only.Array of HMZone objects that represents all the zones in the home.
This property is not atomic.
§Safety
This might not be thread-safe.
Sourcepub unsafe fn addZoneWithName_completionHandler(
&self,
zone_name: &NSString,
completion: &DynBlock<dyn Fn(*mut HMZone, *mut NSError)>,
)
Available on crate features HMZone and block2 only.
pub unsafe fn addZoneWithName_completionHandler( &self, zone_name: &NSString, completion: &DynBlock<dyn Fn(*mut HMZone, *mut NSError)>, )
HMZone and block2 only.Adds a zone to the home.
Parameter zoneName: Name of the zone to add to the home.
Parameter completion: Block that is invoked once the request is processed.
The HMZone is the new zone added to the home.
The NSError provides more information on the status of the request, error
will be nil on success.
Sourcepub unsafe fn removeZone_completionHandler(
&self,
zone: &HMZone,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate features HMZone and block2 only.
pub unsafe fn removeZone_completionHandler( &self, zone: &HMZone, completion: &DynBlock<dyn Fn(*mut NSError)>, )
HMZone and block2 only.Removes a zone from the home.
Parameter zone: Zone to remove from the home.
Parameter completion: Block that is invoked once the request is processed.
The NSError provides more information on the status of the request, error
will be nil on success.
Source§impl HMHome
HMServiceGroup.
impl HMHome
HMServiceGroup.
Sourcepub unsafe fn serviceGroups(&self) -> Retained<NSArray<HMServiceGroup>>
Available on crate feature HMServiceGroup only.
pub unsafe fn serviceGroups(&self) -> Retained<NSArray<HMServiceGroup>>
HMServiceGroup only.Array of HMServiceGroup objects that represents all service groups in the home.
This property is not atomic.
§Safety
This might not be thread-safe.
Sourcepub unsafe fn addServiceGroupWithName_completionHandler(
&self,
service_group_name: &NSString,
completion: &DynBlock<dyn Fn(*mut HMServiceGroup, *mut NSError)>,
)
Available on crate features HMServiceGroup and block2 only.
pub unsafe fn addServiceGroupWithName_completionHandler( &self, service_group_name: &NSString, completion: &DynBlock<dyn Fn(*mut HMServiceGroup, *mut NSError)>, )
HMServiceGroup and block2 only.Adds a service group to the home.
Parameter serviceGroupName: Name of the service group to add to the home.
Parameter completion: Block that is invoked once the request is processed.
The HMServiceGroup is the new service group added to the home.
The NSError provides more information on the status of the request, error
will be nil on success.
Sourcepub unsafe fn removeServiceGroup_completionHandler(
&self,
group: &HMServiceGroup,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate features HMServiceGroup and block2 only.
pub unsafe fn removeServiceGroup_completionHandler( &self, group: &HMServiceGroup, completion: &DynBlock<dyn Fn(*mut NSError)>, )
HMServiceGroup and block2 only.Removes a service group from the home.
Parameter group: Service group to remove from the home.
Parameter completion: Block that is invoked once the request is processed.
The NSError provides more information on the status of the request, error
will be nil on success.
Source§impl HMHome
HMActionSet.
impl HMHome
HMActionSet.
Sourcepub unsafe fn actionSets(&self) -> Retained<NSArray<HMActionSet>>
Available on crate feature HMActionSet only.
pub unsafe fn actionSets(&self) -> Retained<NSArray<HMActionSet>>
HMActionSet only.Array of HMActionSet objects that represents all the action sets in the home.
This property is not atomic.
§Safety
This might not be thread-safe.
Sourcepub unsafe fn addActionSetWithName_completionHandler(
&self,
action_set_name: &NSString,
completion: &DynBlock<dyn Fn(*mut HMActionSet, *mut NSError)>,
)
Available on crate features HMActionSet and block2 only.
pub unsafe fn addActionSetWithName_completionHandler( &self, action_set_name: &NSString, completion: &DynBlock<dyn Fn(*mut HMActionSet, *mut NSError)>, )
HMActionSet and block2 only.Adds a new action set to the home.
Parameter actionSetName: Name of the action set to add to the home.
Parameter completion: Block that is invoked once the request is processed.
The HMActionSet parameter is the new action set added to the home.
The NSError provides more information on the status of the request, error
will be nil on success.
Sourcepub unsafe fn removeActionSet_completionHandler(
&self,
action_set: &HMActionSet,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate features HMActionSet and block2 only.
pub unsafe fn removeActionSet_completionHandler( &self, action_set: &HMActionSet, completion: &DynBlock<dyn Fn(*mut NSError)>, )
HMActionSet and block2 only.Removes an existing action set from the home.
Parameter actionSet: Action set to remove from the home. A builtin action set cannot be removed.
Parameter completion: Block that is invoked once the request is processed.
The NSError provides more information on the status of the request, error
will be nil on success.
Sourcepub unsafe fn executeActionSet_completionHandler(
&self,
action_set: &HMActionSet,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate features HMActionSet and block2 only.
pub unsafe fn executeActionSet_completionHandler( &self, action_set: &HMActionSet, completion: &DynBlock<dyn Fn(*mut NSError)>, )
HMActionSet and block2 only.Executes all the actions within an action set.
Parameter actionSet: Action set to execute.
Parameter completion: Block that is invoked once the request is processed.
The NSError provides more information on the status of the request, error
will be nil on success.
Sourcepub unsafe fn builtinActionSetOfType(
&self,
action_set_type: &NSString,
) -> Option<Retained<HMActionSet>>
Available on crate feature HMActionSet only.
pub unsafe fn builtinActionSetOfType( &self, action_set_type: &NSString, ) -> Option<Retained<HMActionSet>>
HMActionSet only.Retrieve a built-in action set for the home.
Parameter actionSetType: Type of the builtin action set. Supported action set types are HMActionSetTypeWakeUp,
HMActionSetTypeSleep, HMActionSetTypeHomeDeparture and HMActionSetTypeHomeArrival.
Returns: Reference to the built-in action set corresponding to type argument, nil if no matching action set is found.
Source§impl HMHome
HMTrigger.
impl HMHome
HMTrigger.
Sourcepub unsafe fn triggers(&self) -> Retained<NSArray<HMTrigger>>
Available on crate feature HMTrigger only.
pub unsafe fn triggers(&self) -> Retained<NSArray<HMTrigger>>
HMTrigger only.Array of HMTrigger objects that represents all the triggers in the home.
This property is not atomic.
§Safety
This might not be thread-safe.
Sourcepub unsafe fn addTrigger_completionHandler(
&self,
trigger: &HMTrigger,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate features HMTrigger and block2 only.
pub unsafe fn addTrigger_completionHandler( &self, trigger: &HMTrigger, completion: &DynBlock<dyn Fn(*mut NSError)>, )
HMTrigger and block2 only.Adds a trigger to the home. Unless the trigger object is added to the home, it cannot be activated. Throws error and will not be added to home if there is no Home Hub associated with the home
Triggers are specific to an iOS device and are not synced across multiple devices to ensure that the action sets are executed only once.
Parameter trigger: Trigger to add to the home.
Parameter completion: Block that is invoked once the request is processed.
The HMTrigger parameter is the new trigger added to the home.
The NSError provides more information on the status of the request, error
will be nil on success.
Errors when no Home Hub is associated with the home
Sourcepub unsafe fn removeTrigger_completionHandler(
&self,
trigger: &HMTrigger,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate features HMTrigger and block2 only.
pub unsafe fn removeTrigger_completionHandler( &self, trigger: &HMTrigger, completion: &DynBlock<dyn Fn(*mut NSError)>, )
HMTrigger and block2 only.Removes a trigger from the home. If the trigger is active, they are automatically deactivated.
Parameter trigger: Trigger to remove from the home.
Parameter completion: Block that is invoked once the request is processed.
The NSError provides more information on the status of the request, error
will be nil on success.
Source§impl HMHome
Matter.
impl HMHome
Matter.
Sourcepub unsafe fn matterControllerID(&self) -> Retained<NSString>
pub unsafe fn matterControllerID(&self) -> Retained<NSString>
Identifier of the Matter controller associated with this home. This property can be passed as the first argument to +[MTRDeviceController sharedControllerWithId:xpcConnectBlock:] method to get a MTRDeviceController object.
This property is not atomic.
§Safety
This might not be thread-safe.
Sourcepub unsafe fn matterControllerXPCConnectBlock(
&self,
) -> NonNull<DynBlock<dyn Fn() -> NonNull<NSXPCConnection>>>
Available on crate feature block2 only.
pub unsafe fn matterControllerXPCConnectBlock( &self, ) -> NonNull<DynBlock<dyn Fn() -> NonNull<NSXPCConnection>>>
block2 only.Block generating XPC connection on demand through which to access the Matter controller associated with this home. This property can be passed as the second argument to +[MTRDeviceController sharedControllerWithId:xpcConnectBlock:] method to get a MTRDeviceController object.
This property is not atomic.
§Safety
This might not be thread-safe.
Sourcepub unsafe fn matterStartupParametersXPCConnectBlock(
&self,
) -> NonNull<DynBlock<dyn Fn() -> NonNull<NSXPCConnection>>>
Available on crate feature block2 only.
pub unsafe fn matterStartupParametersXPCConnectBlock( &self, ) -> NonNull<DynBlock<dyn Fn() -> NonNull<NSXPCConnection>>>
block2 only.Block generating XPC connection on demand through which to access the Matter controller associated with this home. This property can be passed as part of an MTRXPCDeviceControllerParameters to create an MTRDeviceController that will have access to the Apple Home Fabric.
This property is not atomic.
§Safety
This might not be thread-safe.
Methods from Deref<Target = NSObject>§
Sourcepub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
pub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
Handle messages the object doesn’t recognize.
See Apple’s documentation for details.
Methods from Deref<Target = AnyObject>§
Sourcepub fn class(&self) -> &'static AnyClass
pub fn class(&self) -> &'static AnyClass
Dynamically find the class of this object.
§Panics
May panic if the object is invalid (which may be the case for objects
returned from unavailable init/new methods).
§Example
Check that an instance of NSObject has the precise class NSObject.
use objc2::ClassType;
use objc2::runtime::NSObject;
let obj = NSObject::new();
assert_eq!(obj.class(), NSObject::class());Sourcepub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
👎Deprecated: this is difficult to use correctly, use Ivar::load instead.
pub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
Ivar::load instead.Use Ivar::load instead.
§Safety
The object must have an instance variable with the given name, and it
must be of type T.
See Ivar::load_ptr for details surrounding this.
Sourcepub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
pub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
Attempt to downcast the object to a class of type T.
This is the reference-variant. Use Retained::downcast if you want
to convert a retained object to another type.
§Mutable classes
Some classes have immutable and mutable variants, such as NSString
and NSMutableString.
When some Objective-C API signature says it gives you an immutable class, it generally expects you to not mutate that, even though it may technically be mutable “under the hood”.
So using this method to convert a NSString to a NSMutableString,
while not unsound, is generally frowned upon unless you created the
string yourself, or the API explicitly documents the string to be
mutable.
See Apple’s documentation on mutability and on
isKindOfClass: for more details.
§Generic classes
Objective-C generics are called “lightweight generics”, and that’s because they aren’t exposed in the runtime. This makes it impossible to safely downcast to generic collections, so this is disallowed by this method.
You can, however, safely downcast to generic collections where all the
type-parameters are AnyObject.
§Panics
This works internally by calling isKindOfClass:. That means that the
object must have the instance method of that name, and an exception
will be thrown (if CoreFoundation is linked) or the process will abort
if that is not the case. In the vast majority of cases, you don’t need
to worry about this, since both root objects NSObject and
NSProxy implement this method.
§Examples
Cast an NSString back and forth from NSObject.
use objc2::rc::Retained;
use objc2_foundation::{NSObject, NSString};
let obj: Retained<NSObject> = NSString::new().into_super();
let string = obj.downcast_ref::<NSString>().unwrap();
// Or with `downcast`, if we do not need the object afterwards
let string = obj.downcast::<NSString>().unwrap();Try (and fail) to cast an NSObject to an NSString.
use objc2_foundation::{NSObject, NSString};
let obj = NSObject::new();
assert!(obj.downcast_ref::<NSString>().is_none());Try to cast to an array of strings.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
// This is invalid and doesn't type check.
let arr = arr.downcast_ref::<NSArray<NSString>>();This fails to compile, since it would require enumerating over the array to ensure that each element is of the desired type, which is a performance pitfall.
Downcast when processing each element instead.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
for elem in arr {
if let Some(data) = elem.downcast_ref::<NSString>() {
// handle `data`
}
}Trait Implementations§
Source§impl ClassType for HMHome
impl ClassType for HMHome
Source§const NAME: &'static str = "HMHome"
const NAME: &'static str = "HMHome"
Source§type ThreadKind = <<HMHome as ClassType>::Super as ClassType>::ThreadKind
type ThreadKind = <<HMHome as ClassType>::Super as ClassType>::ThreadKind
Source§impl NSObjectProtocol for HMHome
impl NSObjectProtocol for HMHome
Source§fn isEqual(&self, other: Option<&AnyObject>) -> bool
fn isEqual(&self, other: Option<&AnyObject>) -> bool
Source§fn hash(&self) -> usize
fn hash(&self) -> usize
Source§fn isKindOfClass(&self, cls: &AnyClass) -> bool
fn isKindOfClass(&self, cls: &AnyClass) -> bool
Source§fn is_kind_of<T>(&self) -> bool
fn is_kind_of<T>(&self) -> bool
isKindOfClass directly, or cast your objects with AnyObject::downcast_ref