2017-08-15 3 views
0

J'essaye d'attacher un tableau de doubles à un courrier en utilisant la classe MFMailComposeViewController. Jusqu'à présent, voici mon code dans la classe ViewController:Joindre un tableau de doubles à un courrier dans Swift

func prepareMail(data:[Double]) {     
     // Compose the mail 
     let mailComposer = MFMailComposeViewController() 
     mailComposer.mailComposeDelegate = self 
     mailComposer.setToRecipients(["[email protected]"]) 
     mailComposer.setSubject("subject") 
     mailComposer.setMessageBody("Hello ", isHTML: false) 

     // Name data files (accelerometer + label) 
     let fileName = "file" 

     if let dataToAttach = data { 
      //Attach File 
      mailComposer.addAttachmentData(dataToAttach, mimeType: "text/plain", fileName: "\(fileName)") 
      self.present(mailComposer, animated: true, completion: nil) 
     } 
    } 
} 

Ce code soulève le message suivant:

initialiseur pour une liaison conditionnelle doit avoir un type en option, non [Double]

Alors voici mes pensées:

  • Option 1: Convertissez le tableau de doubles en chaîne et envoyez-le sous forme de fichier texte/texte. Mon intuition, cependant, me dit que ce n'est pas une bonne solution. Je ne suis pas fan de l'analyse syntaxique.
  • Option 2: Encode le tableau en quelque sorte et l'envoyer en utilisant un autre mimetype autre que simple/texte. J'ai exploré certaines options dans IANA mime Types, mais je ne suis pas familier du tout et je ne sais pas par où commencer.

Je ne sais pas comment procéder.

+0

Mettez à jour votre question en essayant de résoudre votre problème en utilisant vos deux options. Mettez à jour votre question avec les problèmes que vous rencontrez avec ces tentatives. – rmaddy

Répondre

1

Votre problème est cette ligne if let dataToAttach = data parce que vos données sont [Double] et ne peut pas être nil, de sorte que vous n'avez pas besoin de vérifier de nil est, ou vous pouvez modifier les paramètres de type à [Double]? pour éviter cette erreur du compilateur.

Remplacement ceci:

if let dataToAttach = data { 
      //Attach File 
      mailComposer.addAttachmentData(dataToAttach, mimeType: "text/plain", fileName: "\(fileNames[i])") 
      self.present(mailComposer, animated: true, completion: nil) 
     } 

par ceci:

func prepareMail(data:[Double]) { 
    // Compose the mail 
    let mailComposer = MFMailComposeViewController() 
    mailComposer.mailComposeDelegate = self 
    mailComposer.setToRecipients(["[email protected]"]) 
    mailComposer.setSubject("subject") 
    mailComposer.setMessageBody("Hello ", isHTML: false) 

    // Name data files (accelerometer + label) 
    let fileName = "file" 

    if let dataToAttach = data.map({String($0)}).joined(separator: "\n").data(using: .utf8) 
    { 
     mailComposer.addAttachmentData(dataToAttach, mimeType: "text/plain", fileName: "\(fileNames[i])") 
     self.present(mailComposer, animated: true, completion: nil) 
    } 

} 

sera suffisant.

+0

Cela ne fonctionnera pas. 'data' n'est pas de type' Data'. – rmaddy

+0

Merci les gars! Je suis en train de tester en ajoutant ceci: let dataTx = Data (buffer: UnsafeBufferPointer (début: data, count: data.count)), que j'ai trouvé [ici] (https://stackoverflow.com/questions/24516170/create-an -array-in-swift-from-an-nsdata-object), car le type 'Data' est obligatoire car @rmaddy commente. – lucasrodesg

+0

@lucasrodesg essayer avec ma réponse maintenant, a été mis à jour –