2017-08-15 3 views
0

MFMailComposeViewControllerクラスを使用してメールに倍精度の配列を添付しようとしています。今のところ、これはViewControllerクラスで私のコードです: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) 
     } 
    } 
} 

このコードは、次のメッセージが発生します。条件付きの結合のための

初期化子はオプションの種類、ない [ダブル]

を持っている必要があります

私の考えはここにあります:

  • オプション1:ダブルスの配列を文字列に変換し、プレーン/テキストファイルとして送信します。私の直感は、これは素晴らしい解決策ではないことを私に伝えています。私は解析のファンではない。
  • オプション2:何とか配列をエンコードし、プレーン/テキスト以外の別のmimetypeを使用して送信します。私はIANA mime Typesのいくつかのオプションを調べましたが、私はよく知られておらず、どこから始めるべきかわかりません。

どのように処理するかわかりません。あなたのデータは[Double]で、nilすることはできませんので

+0

2つのオプションを使用して問題を解決しようとする試みで、質問を更新してください。これらの試行で発生している問題があれば、あなたの質問を更新してください。 – rmaddy

答えて

1

あなたの問題は、このラインif let dataToAttach = dataあるので、あなたはnilあるのをチェックする必要はありませんか、パラメータがこのコンパイラエラーを回避するために[Double]?に入力し変更することができます。この交換

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

このことによって:

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) 
    } 

} 

十分でしょう。

+0

これは動作しません。 'data'は' Data'型ではありません。 – rmaddy

+0

ありがとうございました!私は今、これを追加してテストしています:let dataTx = Data(バッファ:UnsafeBufferPointer(start:data、count:data.count))、私は[ここ](https://stackoverflow.com/questions/24516170/create-an -array-in-an-nsdata-object)、 'Data'型は@rmaddyとしてコメントされています。 – lucasrodesg

+0

@lucasrodesg今、私の答えを試して、更新されました –

関連する問題