问题描述
在SwiftUI中,发现视图输出以下内容:
<ERdepot.UserForeignCurrency:0×600002127750>(entity:UserForeignCurrency;id:0×be25842fe305c8b2<x-coredata://DEF8BFE-D397-49F1-9233-3DAF4019975E/UserForeignCurrency/p4>;data:{amount = 5000;purchaseAmunt = 0;purchaseDate = nil; remark = nil;symbol = USD; })

刚开始以为是视图乱码。
后来排查了解到,是因为Text导致的这一问题。
Text(verbatim:"\(currency)")
在列表中,我输出的currency实际上是CoreData对象:
@FetchRequest(
fetchRequest: {
let request = NSFetchRequest<UserForeignCurrency>(entityName: "UserForeignCurrency")
request.sortDescriptors = [NSSortDescriptor(keyPath: \UserForeignCurrency.symbol, ascending: true)]
return request
}()
var userForeignCurrencies: FetchedResults<UserForeignCurrency>
ForEach(userForeignCurrencies,id:\.self) { currency in
Text(verbatim: "\(currency)") // 出现问题的Text代码
.foregroundColor(.gray)
}
因为使用了Text(verbatim:””)输出的是Core Data实体,而不是Core Data字段,SwiftUI在渲染Text(verbatim:”\(currency)”)时,不知道如何显示Core Data实体,于是默认调用了它的 description 或 debugDescription。
解决方案
使用Text(可选 ?? ””)的形式,输出对应的Core Data实体字段:
Text("\(currency.symbol ?? "")")
.foregroundColor(.gray)

问题得到解决。