我有一個關于在SwiftUI中根據核心資料繪制圖表的概念性問題。 假設我正在構建一個待辦事項串列應用程式,我在核心資料中擁有一個待辦事項物體。該物體具有名稱和 finishDate(該todo被標記為完成的日期)屬性。
為了繪制這兩個變數,我需要一個包含每一天的變數和一個包含每一天完成任務數量的變數。
有人知道我將如何有效地創建這些資料嗎?我知道我可以獲取todo物體資料并選擇正確的屬性。但我如何獲得每一天完成的任務數?最好不要使用for回圈來創建這些變數。
如果有人能幫助我,我將非常感激。
uj5u.com熱心網友回復:
這很容易使用CoreData SwiftUI.
。下面的代碼是針對iOS15 的,但你可以用NSFetchedResultsController或NSFetchRequest/@FetchRequest做同樣的事情,然后將它分組。但要保持實時性,需要花點功夫。
另外,下面的代碼是為了配合CoreData專案的標準蘋果代碼。我在PersistenceController中唯一改變的是為timestamp設定一個隨機的日期。
newItem.timestamp = Date(). addTimeInterval(60*60*24*Double(Int. 隨機(in: -10...10))
這是個簡單的圖
import SwiftUI
@available(iOS 15.0, *)
struct DayChart: 視圖 {
(entity: Item.entity(), sectionIdentifier: .completionDate, sortDescriptors: [NSSortDescriptor(keyPath: Item.timestamp, ascending: true)], predicate: nil, animation: Animation.linear)
var sections: SectionedFetchResults<String, Item>
var maxCount: Int = 1
let spacing: CGFloat = 3
var body。some View {
VStack{
GeometryReader{ geo in {
HStack(alignment: .bottom, spacing: spacing){
ForEach(section){section in.
VStack{
Text(section.count.description)
Rectangle()
.foregroundColor(.blue)
.onAppear(){
maxCount = max(maxCount,section.count)
}
Text(section.id.description).minimumScaleFactor(0.5)
.lineLimit(2)
}.frame(width: (geo.size.width/CGFloat(section.count) - spacing),height: geo.size. height * CGFloat(CGFloat(section.count)/CGFloat(maxCount))
}
}
}
}.padding(.leading, spacing)
}
}
@available(iOS 15.0, *)
結構 DayChart_Previews。PreviewProvider {
static var previews: some View {
DayChart().environment(.managedObjectContext, PersistenceController.preview.container.viewContext)
}
}
extension Item{
//this is the variable that determines your section/column/completion date.
@objc
var completionDate。String{
if self.timestamp != nil{
let dateFormatter: DateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd
MMM"
return dateFormatter.string(from: self.timestamp! )
}else{
return ""。
}
}
}
uj5u.com熱心網友回復:
我會從一個星期中的一天的屬性開始(你可以從你用于完成日期的Date()值中匯出)。然后,您可以使用計數獲取請求(Cocoa 核心資料計數物體的有效方法),或者使用分組和NSDictionaryResultType(大量代碼示例見https://www.cocoanetics.com/2017/04/group-by-count-and-sum-in-coredata/)。分組的方法會給你一個看起來像這樣的字典(來自Cocoanetics文章):
[
{
"count"。111,
"col": "One"。
},
{
"count": 222,
"col": "二", "col": "二"
}
]
我相信,但不確定的是,你必須計算/存盤周天的值作為一個屬性,這些分組方法才能發揮作用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/307972.html
標籤:
上一篇:如何阻止XCode中DerivedData下的模塊檔案出現"簽名不匹配"錯誤?
下一篇:Pgadmin4-審查已定義的域

