I have a custom EnvironmentVariable called analyticsData. On the button tap, I want to perform my button's action and then call a method to send this data.
struct PrimaryButton: View {
@Environment(\.analyticsData) private var analyticsData
private let title: String
private let action: (() -> Void)
init(_ title: String, action: @escaping (() -> Void)) {
self.title = title
self.action = action
}
var body: some View {
Button(action: handleTap) {
Text(title)
}
}
func handleTap() {
action()
// need updated value of analyticsData here!
AnalyticsProxy.shared.sendAnalytics(analyticsData)
}
}
At the point of use for this PrimaryButton, I would like to update my data dynamically. However, tapping between my 2 buttons, the data is 1 click behind.
button 1 tapped, analytics output: buttonTapped = ""
button 2 tapped, analytics output: buttonTapped = "B1"
button 1 tapped, analytics output: buttonTapped = "B2"
In my PrimaryButton handleTap method (above), I need to get the updated value of the environmentVariable before sending the analytics. Is this possible?
Point of use:
struct ContentView: View {
@State var buttonTapped = ""
var body: some View {
VStack(spacing: 64) {
PrimaryButton("Button 1") {
buttonTapped = "B1"
}.analytics(type: .event, name: "Button Tap", data: ["Button": buttonTapped])
PrimaryButton("Button 2") {
buttonTapped = "B2"
}.analytics(type: .event, name: "Button Tap", data: ["Button": buttonTapped])
}
}
}
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
On my M1 mac, using Xcode 13.3, I created a package and displayed the code coverage bar (Editor menu –> Code Coverage).
After running tests, there is no indication of code coverage at all in the source code.
How do I get code coverage when testing a package?
I created a new Package with Xcode and incorporated a dependency, however when I try to use it, I get a "No such module" error.
How do I use the dependency in the Package sources? In a normal project, I can easily import and use AgileDB.
Here's the Package:
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "DBCore",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "DBCore",
targets: ["DBCore"]),
],
dependencies: [
.package(url: "https://github.com/AaronBratcher/AgileDB", from: "6.4.0")
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "DBCore",
dependencies: []),
.testTarget(
name: "DBCoreTests",
dependencies: ["DBCore"]),
]
)
Perhaps the AgileDB package as a dependency in the target? I tried copying that and it won't recognize it.
When showing an ImageDownloader actor, the presenter said a solution on avoiding duplicate downloads is shown with the code associated with this video. When will this code be available? I don't see it on the video page.
I'm trying to swap out the rootViewController in my appDelegate with an animation and it is just flashing to the new viewController without any animation.-(void)showRootController:(UIViewController *)controller {
[UIView transitionWithView:self.window duration:0.5 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
self.window.rootViewController = controller;
[self.window makeKeyAndVisible];
}
completion:nil];
}How can I do this with an animation? (Testing on an iPhone 5s with iOS 8)