2017-08-15 64 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中探索了一些選項,但我並不熟悉,不知道從哪裏開始。

我不確定如何繼續。

+0

更新您的問題,試圖用您的兩個選項解決您的問題。更新你的問題,無論你在這些嘗試中遇到什麼問題。 – rmaddy

回答

1

你的問題是此行if let dataToAttach = data因爲你的數據是[Double],不能nil,這樣你就不會需要檢查的是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

謝謝你們!我現在測試添加這個:讓dataTx =數據(緩衝區:UnsafeBufferPointer(開始:數據,計數:data.count)),我發現[這裏](https://stackoverflow.com/questions/24516170/create-an -array-in-swift-from-an-nsdata-object),因爲@數據類型是@rmaddy所要求的。 – lucasrodesg

+0

@lucasrodesg現在就試試我的答案,已更新 –

相關問題