pub struct SRSensorReader { /* private fields */ }
Expand description
Implementations§
Source§impl SRSensorReader
impl SRSensorReader
Sourcepub unsafe fn initWithSensor(
this: Allocated<Self>,
sensor: &SRSensor,
) -> Retained<Self>
pub unsafe fn initWithSensor( this: Allocated<Self>, sensor: &SRSensor, ) -> Retained<Self>
Initializes an SRSensorReader that will fetch data for the current device and any companion
pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>
pub unsafe fn new() -> Retained<Self>
Sourcepub unsafe fn startRecording(&self)
pub unsafe fn startRecording(&self)
Starts recording for the reader’s sensor
The reader must be authorized for the sensor for this to succeed. This starts recording on this device and any paired devices. If other readers have already started the sensor recording this reader’s interest in recording will be maintained. Other readers in other apps for the same sensor will not affect the recording status of this reader.
In the case of success, completion notification will be delivered to the delegate in the sensorReaderWillStartRecording: delegate method.
In the case of failure, error notification will be delivered to the delegate in the sensorReader:startRecordingFailedWithError: delegate method.
Sourcepub unsafe fn stopRecording(&self)
pub unsafe fn stopRecording(&self)
Stops recording for the reader’s sensor
The reader must be authorized for the sensor for this to succeed. This stops recording on this device and any paired devices. Sensor recording will continue until the last interested reader has stopped recording.
In the case of success, completion notification will be delivered to the delegate in the sensorReaderDidStopRecording: delegate method.
In the case of failure, error notification will be delivered to the delegate in the sensorReader:stopRecordingFailedWithError: delegate method.
Sourcepub unsafe fn fetchDevices(&self)
pub unsafe fn fetchDevices(&self)
Fetches device information for all devices that have stored data for the given sensor in SensorKit
If the request completes successfully, devices will be returned to the delegate in the sensorReader:fetchedDevices: callback. If the request failed, an error will be returned to the delegate in the sensorReader:fetchDevicesFailedWithError: method
Sourcepub unsafe fn fetch(&self, request: &SRFetchRequest)
pub unsafe fn fetch(&self, request: &SRFetchRequest)
Fetches samples for the reader’s sensor for given request parameters
The reader must be authorized for the sensor for this to succeed.
Samples will be delivered to the delegate through multiple calls to the sensorReader:fetchingRequest:didFetchResult: delegate method
In the case of a failure, any error will be delivered to the delegate in the sensorReader:fetchingRequest:failedWithError: method.
In the case of success, completion notification will be delivered to the delegate in the sensorReader:didCompleteFetch: method.
Parameter request
: The query parameters for this fetch
The current authorization status of the calling application.
pub unsafe fn delegate( &self, ) -> Option<Retained<ProtocolObject<dyn SRSensorReaderDelegate>>>
Sourcepub unsafe fn setDelegate(
&self,
delegate: Option<&ProtocolObject<dyn SRSensorReaderDelegate>>,
)
pub unsafe fn setDelegate( &self, delegate: Option<&ProtocolObject<dyn SRSensorReaderDelegate>>, )
Setter for delegate
.
This is a weak property.
Sourcepub unsafe fn requestAuthorizationForSensors_completion(
sensors: &NSSet<SRSensor>,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate feature block2
only.
pub unsafe fn requestAuthorizationForSensors_completion( sensors: &NSSet<SRSensor>, completion: &DynBlock<dyn Fn(*mut NSError)>, )
block2
only.Request authorization to a given set of sensors
If the SRSensorReader instance is not authorized, this method must be called before any other methods. Failure to request authorization will cause errors to be returned from the other methods.
When SensorKit prepares the prompt for display, it will look at the NSSensorKitUsageDetail key in your Info.plist. The value should be a dictionary containing usage descriptions for all of the sensors being requested. The description key you provide to this method must correspond to an entry in that dictionary. To retrieve a localized string, SensorKit will load your InfoPlist.strings file and try to look up a string using the description key you provided. If that fails, SensorKit will use the content provided in your Info.plist.
SensorKit may decide against showing the user a prompt. For example, if the user has already chosen whether to grant the application access to all of the types provided. When that happens, your completion block will be called with an appropriate NSError. If the user responded to the prompt, your completion block will be called with a nil error. Changes in authorization status will delivered to the delegate in the sensorReader:didChangeAuthorizationStatus: method.
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 AsRef<AnyObject> for SRSensorReader
impl AsRef<AnyObject> for SRSensorReader
Source§impl AsRef<NSObject> for SRSensorReader
impl AsRef<NSObject> for SRSensorReader
Source§impl AsRef<SRSensorReader> for SRSensorReader
impl AsRef<SRSensorReader> for SRSensorReader
Source§impl Borrow<AnyObject> for SRSensorReader
impl Borrow<AnyObject> for SRSensorReader
Source§impl Borrow<NSObject> for SRSensorReader
impl Borrow<NSObject> for SRSensorReader
Source§impl ClassType for SRSensorReader
impl ClassType for SRSensorReader
Source§const NAME: &'static str = "SRSensorReader"
const NAME: &'static str = "SRSensorReader"
Source§type ThreadKind = <<SRSensorReader as ClassType>::Super as ClassType>::ThreadKind
type ThreadKind = <<SRSensorReader as ClassType>::Super as ClassType>::ThreadKind
Source§impl Debug for SRSensorReader
impl Debug for SRSensorReader
Source§impl Deref for SRSensorReader
impl Deref for SRSensorReader
Source§impl Hash for SRSensorReader
impl Hash for SRSensorReader
Source§impl Message for SRSensorReader
impl Message for SRSensorReader
Source§impl NSObjectProtocol for SRSensorReader
impl NSObjectProtocol for SRSensorReader
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