pub struct THClient { /* private fields */ }THClient only.Expand description
A class that supports safely sharing Thread credentials between multiple clients.
Request credentials for either a specific Thread network or for the
preferred network using THClient. The preferred network is the default
Thread network chosen by the framework for a home.
The ThreadNetwork framework maintains a database of network credentials. The class allows clients to store, list, and delete credentials for a given network from the database.
Some methods in THClient use the team ID, a string that you store in
your application’s Info.plist. The ThreadNetwork framework uses the team
ID to preserve the privacy of the Thread network credentials across
different clients. For example, credentials stored by one client can’t be
deleted or modified by another client.
- Important: Thread credentials give you the ability to add any device into the Thread network. Use this information responsibly.
See also Apple’s documentation
Implementations§
Source§impl THClient
impl THClient
Sourcepub unsafe fn init(this: Allocated<Self>) -> Retained<Self>
pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>
Creates the client object.
- Returns: An instance of the client object.
Sourcepub unsafe fn retrieveAllCredentials(
&self,
completion: &DynBlock<dyn Fn(*mut NSSet<THCredentials>, *mut NSError)>,
)
Available on crate features THCredentials and block2 only.
pub unsafe fn retrieveAllCredentials( &self, completion: &DynBlock<dyn Fn(*mut NSSet<THCredentials>, *mut NSError)>, )
THCredentials and block2 only.Requests all Thread credentials from the framework.
The framework identifies the developer by the team ID. When calling this method, you receive credentials for your team ID only.
- Parameters:
- completion: The completion handler the framework calls when the credentials become available.
Concurrency Note: You can call this method from synchronous code using a completion handler, as shown on this page, or you can call it as an asynchronous method that has the following declaration:
func allCredentials() async throws -> Set
<THCredentials
For information about concurrency and asynchronous code in Swift, see
<doc ://com.apple.documentation/documentation/swift/calling-objective-c-apis-asynchronously>.
Sourcepub unsafe fn retrieveAllActiveCredentials(
&self,
completion: &DynBlock<dyn Fn(*mut NSSet<THCredentials>, *mut NSError)>,
)
Available on crate features THCredentials and block2 only.
pub unsafe fn retrieveAllActiveCredentials( &self, completion: &DynBlock<dyn Fn(*mut NSSet<THCredentials>, *mut NSError)>, )
THCredentials and block2 only.Requests all Thread credentials with active border routers around from the framework.
The framework identifies the developer by the team ID. When calling this method, you will receive credentials for active border routers around. You receive credentials for your team ID only.
- Parameters:
- completion: The completion handler the framework calls when the credentials become available.
Concurrency Note: You can call this method from synchronous code using a completion handler, as shown on this page, or you can call it as an asynchronous method that has the following declaration:
func allActiveCredentials() async throws -> Set
<THCredentials
For information about concurrency and asynchronous code in Swift, see
<doc ://com.apple.documentation/documentation/swift/calling-objective-c-apis-asynchronously>.
Sourcepub unsafe fn deleteCredentialsForBorderAgent_completion(
&self,
border_agent_id: &NSData,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate feature block2 only.
pub unsafe fn deleteCredentialsForBorderAgent_completion( &self, border_agent_id: &NSData, completion: &DynBlock<dyn Fn(*mut NSError)>, )
block2 only.Deletes Thread network credentials from the framework database for a Border Agent.
The Border Agent is the software component running in the Border Router responsible for advertising itself in the Wi-Fi or Ethernet network.
- Parameters:
- borderAgentID: The identifer of a Thread network Border Agent.
- completion: The completion handler the framework calls after deleting the credentials.
Concurrency Note: You can call this method from synchronous code using a completion handler, as shown on this page, or you can call it as an asynchronous method that has the following declaration:
func deleteCredentials(forBorderAgent borderAgentID: Data) async throwsFor information about concurrency and asynchronous code in Swift, see <doc ://com.apple.documentation/documentation/swift/calling-objective-c-apis-asynchronously>.
Sourcepub unsafe fn retrieveCredentialsForBorderAgent_completion(
&self,
border_agent_id: &NSData,
completion: &DynBlock<dyn Fn(*mut THCredentials, *mut NSError)>,
)
Available on crate features THCredentials and block2 only.
pub unsafe fn retrieveCredentialsForBorderAgent_completion( &self, border_agent_id: &NSData, completion: &DynBlock<dyn Fn(*mut THCredentials, *mut NSError)>, )
THCredentials and block2 only.Requests Thread credentials for a Border Agent.
The framework identifies the developer by the team ID. When calling this method, you receive credentials for your team ID only.
- Parameters:
- borderAgentID: The identifer of a Thread network Border Agent.
- completion: The completion handler the framework calls when the credentials become available.
Concurrency Note: You can call this method from synchronous code using a completion handler, as shown on this page, or you can call it as an asynchronous method that has the following declaration:
func credentials(forBorderAgentID borderAgentID: Data) async throws -> THCredentialsFor information about concurrency and asynchronous code in Swift, see <doc ://com.apple.documentation/documentation/swift/calling-objective-c-apis-asynchronously>.
Sourcepub unsafe fn storeCredentialsForBorderAgent_activeOperationalDataSet_completion(
&self,
border_agent_id: &NSData,
active_operational_data_set: &NSData,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate feature block2 only.
pub unsafe fn storeCredentialsForBorderAgent_activeOperationalDataSet_completion( &self, border_agent_id: &NSData, active_operational_data_set: &NSData, completion: &DynBlock<dyn Fn(*mut NSError)>, )
block2 only.Stores Thread network credentials into the framework database that a Border Agent provides.
The Border Agent is the software component running in the Border Router responsible for advertising itself in the Wi-Fi or Ethernet network.
The framework only stores credentials if it can find an mDNS record for the Border Agent that contains the specified Border Agent identifier.
- Parameters:
- borderAgentID: The identifer of an active Thread network Border Agent.
- activeOperationalDataSet: The essential operational parameters for the Thread network.
- completion: The completion handler the framework calls after storing the credentials.
Concurrency Note: You can call this method from synchronous code using a completion handler, as shown on this page, or you can call it as an asynchronous method that has the following declaration:
func storeCredentials(forBorderAgent borderAgentID: Data, activeOperationalDataSet: Data) async throwsFor information about concurrency and asynchronous code in Swift, see <doc ://com.apple.documentation/documentation/swift/calling-objective-c-apis-asynchronously>.
Sourcepub unsafe fn retrievePreferredCredentials(
&self,
completion: &DynBlock<dyn Fn(*mut THCredentials, *mut NSError)>,
)
Available on crate features THCredentials and block2 only.
pub unsafe fn retrievePreferredCredentials( &self, completion: &DynBlock<dyn Fn(*mut THCredentials, *mut NSError)>, )
THCredentials and block2 only.Requests Thread credentials for the preferred network.
When you call this method, an alert appears asking for user permission to access credentials.
- Parameters:
- completion: The completion handler the framework calls when the credentials become available.
Concurrency Note: You can call this method from synchronous code using a completion handler, as shown on this page, or you can call it as an asynchronous method that has the following declaration:
func preferredCredentials() async throws -> THCredentialsFor information about concurrency and asynchronous code in Swift, see <doc ://com.apple.documentation/documentation/swift/calling-objective-c-apis-asynchronously>.
Sourcepub unsafe fn retrieveCredentialsForExtendedPANID_completion(
&self,
extended_panid: &NSData,
completion: &DynBlock<dyn Fn(*mut THCredentials, *mut NSError)>,
)
Available on crate features THCredentials and block2 only.
pub unsafe fn retrieveCredentialsForExtendedPANID_completion( &self, extended_panid: &NSData, completion: &DynBlock<dyn Fn(*mut THCredentials, *mut NSError)>, )
THCredentials and block2 only.Requests Thread credentials for an extended Personal Area Network (PAN) ID.
When calling this method, an alert appears asking for user permission to access credentials.
- Parameters:
- extendedPANID: The extended PAN identifier.
- completion: The completion handler the framework calls when the credentials become available.
Concurrency Note: You can call this method from synchronous code using a completion handler, as shown on this page, or you can call it as an asynchronous method that has the following declaration:
func credentials(forExtendedPANID extendedPANID: Data) async throws -> THCredentialsFor information about concurrency and asynchronous code in Swift, see <doc ://com.apple.documentation/documentation/swift/calling-objective-c-apis-asynchronously>.
Sourcepub unsafe fn checkPreferredNetworkForActiveOperationalDataset_completion(
&self,
active_operational_data_set: &NSData,
completion: &DynBlock<dyn Fn(Bool)>,
)
Available on crate feature block2 only.
pub unsafe fn checkPreferredNetworkForActiveOperationalDataset_completion( &self, active_operational_data_set: &NSData, completion: &DynBlock<dyn Fn(Bool)>, )
block2 only.Determines if the essential operating parameters match the preferred network’s parameters.
- Parameters:
- activeOperationalDataSet: The essential operating parameters to compare against the preferred network’s parameters.
- completion: The completion handler that returns the result of the comparison.
Concurrency Note: You can call this method from synchronous code using a completion handler, as shown on this page, or you can call it as an asynchronous method that has the following declaration:
func isPreferred(forActiveOperationalDataset activeOperationalDataSet: Data) async -> BoolFor information about concurrency and asynchronous code in Swift, see <doc ://com.apple.documentation/documentation/swift/calling-objective-c-apis-asynchronously>.
Sourcepub unsafe fn isPreferredNetworkAvailableWithCompletion(
&self,
completion: &DynBlock<dyn Fn(Bool)>,
)
Available on crate feature block2 only.
pub unsafe fn isPreferredNetworkAvailableWithCompletion( &self, completion: &DynBlock<dyn Fn(Bool)>, )
block2 only.Determines if the preferred network is available or not
- Parameters:
- completion: The completion handler that returns the result of the preferred network availability.
Concurrency Note: You can call this method from synchronous code using a completion handler, as shown on this page, or you can call it as an asynchronous method that has the following declaration:
func isPreferredAvailable() async -> BoolFor information about concurrency and asynchronous code in Swift, see <doc ://com.apple.documentation/documentation/swift/calling-objective-c-apis-asynchronously>.
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 THClient
impl ClassType for THClient
Source§const NAME: &'static str = "THClient"
const NAME: &'static str = "THClient"
Source§type ThreadKind = <<THClient as ClassType>::Super as ClassType>::ThreadKind
type ThreadKind = <<THClient as ClassType>::Super as ClassType>::ThreadKind
Source§impl NSObjectProtocol for THClient
impl NSObjectProtocol for THClient
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