我如何使用另一个函数swift的变量?

时间:2017-05-01 14:21:23

标签: ios swift function

我在联系人选择器功能中有一个名为email的变量。我试图在IBAction函数的MFMailComposeViewController函数中使用该变量。我想将它应用于toRecipient。我如何使用另一个函数的变量?

import UIKit
import Contacts
import ContactsUI
import MessageUI

class ViewController: UIViewController, CNContactPickerDelegate, MFMailComposeViewControllerDelegate, UITextFieldDelegate {
    //Message Setup
    @IBOutlet weak var nameTextField: UITextField!
    @IBOutlet weak var companyTextField: UITextField!
    @IBOutlet weak var lblDetails: UILabel!

    @IBAction func btnSelectEmployee(_ sender: Any) {
        let entityType = CNEntityType.contacts
        let authStatus = CNContactStore.authorizationStatus(for: entityType)

        if authStatus == CNAuthorizationStatus.notDetermined {
            let contactStore = CNContactStore.init()
            contactStore.requestAccess(for: entityType, completionHandler: { (success, nil) in
                if success {
                    self.openContacts()
                }
                else {
                    print("Not Authorized")
                }
            })
        }
        else if authStatus == CNAuthorizationStatus.authorized {
            self.openContacts()
        }
    }

    func openContacts() {
        let contactPicker = CNContactPickerViewController.init()

        contactPicker.delegate = self

        self.present(contactPicker, animated: true, completion: nil)
    }

    func contactPickerDidCancel(_ picker: CNContactPickerViewController) {
        picker.dismiss(animated: true) {
        }
    }

    func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
        //When user select any contact

        let fullName = "\(contact.givenName) \(contact.familyName)"
        var email = "Not Available"

        if !contact.emailAddresses.isEmpty {
            let emailString = (((contact.emailAddresses[0] as AnyObject).value(forKey: "labelValuePair") as AnyObject).value(forKey: "value"))

            email = emailString! as! String

            self.lblDetails.text = "\(fullName)\n \(email)"
        }
    }

    //Mail View

    @IBAction func sendAction(_ sender: Any) {
        let mailVC = MFMailComposeViewController()
        mailVC.mailComposeDelegate = self
        mailVC.setSubject("Hello. You have a visitor in the lobby.")

        let mailContent = "\(nameTextField.text!) from \(companyTextField.text!) is here to see you."

        mailVC.setMessageBody(mailContent, isHTML: false)

        let toRecipient = "somebody5555555@gmail.com"

        mailVC.setToRecipients([toRecipient])

        self.present(mailVC, animated: true) {
            self.nameTextField.text = ""
            self.companyTextField.text = ""
        }            
    }

    func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
        controller.dismiss(animated: true, completion: nil)
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        nameTextField.resignFirstResponder()
        companyTextField.resignFirstResponder()

        return true
    }
}

1 个答案:

答案 0 :(得分:0)

在函数外定义var

  var email = "Not Available"

  func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {

    //When user select any contact

    let fullName = "\(contact.givenName) \(contact.familyName)"




    if !contact.emailAddresses.isEmpty {

        let emailString = (((contact.emailAddresses[0] as AnyObject).value(forKey: "labelValuePair") as AnyObject).value(forKey: "value"))

        email = emailString! as! String

        self.lblDetails.text = "\(fullName)\n \(email)"
    }

}

现在,您可以在任何地方使用您所在的变量。

要获得更多基础知识,请阅读文档Apple Documentation