Swift
Swift
Async Methods Returning an Object
See more Async Examples
Demonstrates 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.Chilkat Swift Downloads
func chilkatTest() {
var success: Bool = false
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
success = false
let mailman = CkoMailMan()!
// Set the POP3 server's hostname
mailman.mailHost = "pop.example.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: 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: 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: 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)
task = nil
if !success {
print("\(email.lastErrorText!)")
return
}
else {
print("\(email.from!): \(email.subject!)\n")
}
}
}