如何使用来自核心数据类的所有对象创建字符串

时间:2018-08-13 15:39:01

标签: ios swift core-data

说明

在我的应用程序中,我想添加导出成员数据的功能。我在谈论会员的所有交易。这就是我所拥有的,我希望我的要求很清楚。 我必须编辑什么才能起作用?还是我的方法正确?

var str: [String] = []
for trans in (member?.transactions!)! {
    let trnsctnr = trans.reason
    let trnsctna = String(trans.money)
    var trnsctnd = ""
    if let trnsd = trans.date{
        trnsctnd = dateFormatter.string(from: trnsd)
    }
    str = [trnsctnr, trnsctna, trnsctnd] as! [String]
}

此代码无效。我想在“ MFMailComposerController”中添加它,然后显示此错误:

  

无法将'Never'类型的值转换为预期的参数类型'String'

Core Data Model

所以我想导出成员所做的所有交易的数据。

我作为计算属性所做的事情:

struct stringForMFMail {
            let trnsctnr = transaction?.reason
            var trnsctna = ""
            if let trns  = transaction?.money {
                trnsctna = String(trns)

            }
            var trnsctnd = ""
            if let trnsd = transaction?.date{
                trnsctnd = dateFormatter.string(from: trnsd)
            }
            let dataString = [trnsctnr, trnsctna, trnsctnd]


            }

这根本不起作用,所以我确定我做错了。有一些错误,例如:结构声明不能关闭外部范围中定义的值“ self”。这部分总共有12个错误,所以我做错了什么。

1 个答案:

答案 0 :(得分:2)

在类Transaction中添加此计算所得的属性,它返回三个值(如果存在),以逗号分隔。

var stringForMFMail : String {
     var result = self.reason ?? "" 
     result += "\(self.money)"

     if let trnsd = self.date {
        result += ", \(dateFormatter.string(from: trnsd))"
     }
     return result
}

还在Transaction

中添加此日期格式
let dateFormatter : DateFormatter = {
    let formatter = DateFormatter()
    formatter.locale = Locale(identifier: "en_US_POSIX")
    formatter.dateFormat = "dd:MM:yyyy"
    return formatter
}()

现在您可以填充数组

var mailStrings = [String]()
if let transactions = member?.transactions {
   mailStrings = member.transactions.map{ $0.stringForMFMail }
}

如果您需要一个字符串,请join数组

let str = mailStrings.join(separator: ", ")