@available(iOS 17, *)
struct DetailsTappableItemsTip: Tip {
static let viewedDetails: Event = Event(id: "viewedDetails")
var title: Text {
Text("Learn More About This")
}
var message: Text? {
Text("Tip text here.")
}
var image: Image? {
Image(.icInfo)
}
var rules: [Rule] {
#Rule(Self.viewedDetails) {
$0.donations
.filter { $0.date < Date.now.addingTimeInterval(-1 * 60 * 60 * 24) }
.count > 0
}
}
}
Post
Replies
Boosts
Views
Activity
Just to follow up on this a bit, I did find that Apple apparently changed semantics since the WWDC video was made, and they introduced a DonationTimeRange structure that you can use like this:
#Rule(Self.viewedDetails) {
$0.donations
.donatedWithin(.days(5))
.count > 0
Unfortunately, this doesn't provide a way to achieve what I want for one of my rules, which is to determine if the user has been using the app for at least a calendar day. You might think that you could construct an expression comparing the count of two .donatedWithin ranges:
#Rule(Self.viewedDetails) {
$0.donations.donatedWithin(.weeks(52)).count > $0.donations.donatedWithin(.days(1)).count
But no, you can't. This doesn't work because the #Rule macro explicitly requires a count comparison. If you try to write it as a raw predicate expression, it will compile but assert at runtime.
So, at this point, I've given up trying to write the rule that I wanted to write. But perhaps someone will see the question and point out something that I've missed. Or perhaps Apple will see the question and understand that .donatedWithin doesn't meet everyone's needs.
Yes, thanks, I did mention that I created a TipViewStyle as a workaround. What I was hoping was that there might be a way to do this with a method on the default TipView, similar to tipBackground or tipCornerRadius.
It seems like an oversight that you can change the background color of the tip and change the color of the text and any icon, but not the color of the close button.