Skip to content

Commit f55b491

Browse files
committed
Fixed macCatalyst compability.
1 parent 9749237 commit f55b491

File tree

4 files changed

+69
-24
lines changed

4 files changed

+69
-24
lines changed

Sources/SwiftUIExtension/Compability/SymbolEffect.swift

+2-17
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,8 @@ import SwiftUI
33
extension View {
44

55
public func symbolEffectCompability(_ model: SymbolEffectCompability) -> some View {
6-
return self
7-
/*if #available(iOS 17, *) {
8-
switch model {
9-
case .pulse:
10-
return self.symbolEffect(.pulse)
11-
default:
12-
return self
13-
}
14-
} else {
15-
return self
16-
}*/
17-
}
18-
19-
public func scrollTargetBehaviorCompability22() -> some View {
20-
if #available(iOS 17.0, watchOS 10.0, macOS 14.0, *) {
21-
return self.scrollTargetBehavior(.viewAligned)
6+
if #available(iOS 17, *) {
7+
return self.symbolEffect(.pulse)
228
} else {
239
return self
2410
}
@@ -29,4 +15,3 @@ public enum SymbolEffectCompability {
2915

3016
case pulse
3117
}
32-

Sources/SwiftUIExtension/Extensions/ImageExtension.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ extension Image {
1212
completion(Image(uiImage: songArtwork))
1313
#endif
1414

15-
#if canImport(AppKit)
15+
#if canImport(AppKit) && !targetEnvironment(macCatalyst)
1616
let songArtwork = NSImage(data: data) ?? NSImage()
1717
completion(Image(nsImage: songArtwork))
1818
#endif
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import SwiftUI
2+
3+
extension View {
4+
5+
public func sensoryFeedbackCompability<T>(_ feedback: SensoryFeedbackCompability, trigger: T) -> some View where T : Equatable {
6+
self.modifier(SensoryFeedbackModifier(feedback, trigger: trigger))
7+
}
8+
}
9+
10+
struct SensoryFeedbackModifier<T: Equatable>: ViewModifier {
11+
12+
let feedback: SensoryFeedbackCompability
13+
let trigger: T
14+
15+
init(_ feedback: SensoryFeedbackCompability, trigger: T) {
16+
self.feedback = feedback
17+
self.trigger = trigger
18+
}
19+
20+
func body(content: Content) -> some View {
21+
if #available(iOS 17.0, *) {
22+
content
23+
.sensoryFeedback(.selection, trigger: trigger)
24+
} else {
25+
content
26+
}
27+
}
28+
}
29+
30+
public enum SensoryFeedbackCompability {
31+
32+
case selection
33+
}
34+
35+
/*
36+
struct SensoryFeedbackModifier: ViewModifier {
37+
38+
let selectedElement: AnyHasherable
39+
40+
@ViewBuilder
41+
func body(content: Content) -> some View {
42+
if #available(iOS 17, *) {
43+
content.sensoryFeedback(.selection, trigger: selectedElement)
44+
} else {
45+
content
46+
}
47+
}
48+
}
49+
50+
extension View {
51+
func applySensoryFeedback(selectedElement: AnyHasherable) -> some View {
52+
self.modifier(SensoryFeedbackModifier(selectedElement: selectedElement))
53+
}
54+
}
55+
*/

Sources/SwiftUIExtension/Views/SelectableStack.swift

+11-6
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@ public struct SelectableStack<Data, Content>: View where Data : RandomAccessColl
44

55
private let alignment: Alignment
66
private let space: CGFloat
7-
private let data: Data
7+
private let data: Data?
88
private let content: (Data.Element, Bool) -> Content
99

10-
@Binding private var selectedElement: Data.Element
10+
@Binding private var selectedElement: Data.Element?
1111

1212
public init(
1313
alignment: Alignment,
1414
space: CGFloat = Spaces.default_half,
15-
data: Data,
16-
selectedElement: Binding<Data.Element>,
15+
data: Data?,
16+
selectedElement: Binding<Data.Element?>,
1717
@ViewBuilder content: @escaping (Data.Element, Bool) -> Content
1818
) {
1919
self.alignment = alignment
@@ -27,10 +27,15 @@ public struct SelectableStack<Data, Content>: View where Data : RandomAccessColl
2727
switch alignment {
2828
case .vertical:
2929
VStack(spacing: space) {
30-
ForEach(data) { element in
31-
content(element, selectedElement == element)
30+
if let data {
31+
ForEach(data) { element in
32+
content(element, selectedElement == element)
33+
}
3234
}
3335
}
36+
.onChange(of: selectedElement) { _ in
37+
UIFeedbackGenerator.impactOccurred(.light)
38+
}
3439
case .horizontal:
3540
EmptyView()
3641
}

0 commit comments

Comments
 (0)