Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Swift) Async Methods Returning an ObjectDemonstrates how to call an asynchronous method that returns an object. This example reads email from a POP3 server using the Async versions of the Chilkat methods.
func chilkatTest() { // All Chilkat classes can be unlocked at once at the beginning of a program // by calling UnlockBundle. It requires a Bundle unlock code. let chilkatGlob = CkoGlobal()! var success: Bool = chilkatGlob.unlockBundle("Anything for 30-day trial.") if success != true { print("\(chilkatGlob.lastErrorText!)") return } let mailman = CkoMailMan()! // Set the POP3 server's hostname mailman.mailHost = "pop.someMailServer.com" // Set the POP3 login/password and any other requirements.. mailman.popUsername = "myLogin" mailman.popPassword = "myPassword" mailman.popSsl = true mailman.mailPort = 995 // Connect to the POP3 server: var task: CkoTask? = mailman.pop3BeginSessionAsync() if mailman.lastMethodSuccess == false { print("\(mailman.lastErrorText!)") return } // Start the background task. success = task!.run() if !success { print("\(task!.lastErrorText!)") task = nil return } // Wait for the POP3 connect task to finish. // The true/false returned by Wait applies to the Wait method call, not the task. var maxWaitMs: Int = 30000 success = task!.wait(maxWaitMs) if !success || (task!.statusInt.intValue != 7) || (task!.taskSuccess != true) { if !success { // The task.LastErrorText applies to the Wait method call. print("\(task!.lastErrorText!)") } else { // The ResultErrorText applies to the underlying task method call (i.e. the Pop3BeginSession) print("\(task!.status!)") print("\(task!.resultErrorText!)") } task = nil return } task = nil // Get the number of messages in the mailbox. task = mailman.getMailboxCountAsync() // To keep the example short, we'll skip handling failures. // The failures would be handled in the same way as shown above. success = task!.run() success = task!.wait(maxWaitMs) var numMessages: Int = task!.getResultInt().intValue task = nil if numMessages == 0 { return } let email = CkoEmail()! var i: Int for i = 1; i <= numMessages; i++ { task = mailman.fetch(byMsgnumAsync: i) if mailman.lastMethodSuccess == false { print("\(mailman.lastErrorText!)") return } success = task!.run() success = task!.wait(maxWaitMs) if !success || (task!.statusInt.intValue != 7) || (task!.taskSuccess != true) { if !success { // The task.LastErrorText applies to the Wait method call. print("\(task!.lastErrorText!)") } else { // The ResultErrorText applies to the underlying task method call (i.e. the FetchByMsgnum) print("\(task!.status!)") print("\(task!.resultErrorText!)") } task = nil return } // Each Chilkat object that can be a return value of an asynchronous task will // have a method named LoadTaskResult. The object returned in the underlying // asynchronous method call is retrieved by calling LoadTaskResult. // To say it another way: The application will provide a pre-existing object of // the desired return type (in this case it is an email object). This object is // loaded by calling LoadTaskResult. success = email.loadTaskResult(task) task = nil if !success { print("\(email.lastErrorText!)") return } else { print("\(email.from!): \(email.subject!)\n") } } } |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.