Skip to content

Commit 4de0f53

Browse files
authored
Merge pull request #4 from Maks-Jago/add-macOS-support
add support
2 parents 05f032a + 15b13fe commit 4de0f53

9 files changed

+145
-32
lines changed

Sources/SwiftUI-Kit/Extensions/NSAttributedString.swift

+102-25
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,94 @@
66
//
77

88
import SwiftUI
9+
#if os(iOS)
10+
import UIKit
11+
public extension NSAttributedString {
12+
func setFont(for text: String, font: UIFont) -> NSAttributedString {
13+
let ranges = self.string.ranges(of: text)
14+
15+
guard !ranges.isEmpty else {
16+
return self
17+
}
18+
let nsRanges = ranges.map { NSRange($0, in: self.string) }
19+
20+
let newStr = self.mutableCopy() as! NSMutableAttributedString
21+
newStr.beginEditing()
22+
for nsRange in nsRanges {
23+
newStr.addAttribute(.font, value: font, range: nsRange)
24+
}
25+
newStr.endEditing()
26+
return newStr
27+
}
28+
29+
func setFont(for words: [String], font: UIFont) -> NSAttributedString {
30+
let newStr = self.mutableCopy() as! NSMutableAttributedString
31+
newStr.beginEditing()
32+
33+
for word in words {
34+
let ranges = self.string.ranges(of: word)
35+
36+
guard !ranges.isEmpty else {
37+
continue
38+
}
39+
40+
let nsRanges = ranges.map { NSRange($0, in: self.string) }
41+
42+
for nsRange in nsRanges {
43+
newStr.addAttribute(.font, value: font, range: nsRange)
44+
}
45+
}
46+
newStr.endEditing()
47+
48+
return newStr
49+
}
50+
}
51+
52+
#else
53+
import AppKit
54+
55+
public extension NSAttributedString {
56+
func setFont(for text: String, font: NSFont) -> NSAttributedString {
57+
let ranges = self.string.ranges(of: text)
58+
59+
guard !ranges.isEmpty else {
60+
return self
61+
}
62+
let nsRanges = ranges.map { NSRange($0, in: self.string) }
63+
64+
let newStr = self.mutableCopy() as! NSMutableAttributedString
65+
newStr.beginEditing()
66+
for nsRange in nsRanges {
67+
newStr.addAttribute(.font, value: font, range: nsRange)
68+
}
69+
newStr.endEditing()
70+
return newStr
71+
}
72+
73+
func setFont(for words: [String], font: NSFont) -> NSAttributedString {
74+
let newStr = self.mutableCopy() as! NSMutableAttributedString
75+
newStr.beginEditing()
76+
77+
for word in words {
78+
let ranges = self.string.ranges(of: word)
79+
80+
guard !ranges.isEmpty else {
81+
continue
82+
}
83+
84+
let nsRanges = ranges.map { NSRange($0, in: self.string) }
85+
86+
for nsRange in nsRanges {
87+
newStr.addAttribute(.font, value: font, range: nsRange)
88+
}
89+
}
90+
newStr.endEditing()
91+
92+
return newStr
93+
}
94+
}
95+
96+
#endif
997

1098
//MARK: - Attributed String By Trimming CharacterSet
1199
public extension NSAttributedString {
@@ -81,6 +169,12 @@ public extension NSAttributedString {
81169
}
82170
}
83171

172+
173+
//MARK: - Set Font
174+
175+
#if os(iOS)
176+
import UIKit
177+
84178
//MARK: - Set Color
85179
public extension NSAttributedString {
86180
func setColor(for text: String, color: UIColor) -> NSAttributedString {
@@ -101,9 +195,12 @@ public extension NSAttributedString {
101195
}
102196
}
103197

104-
//MARK: - Set Font
198+
#else
199+
import AppKit
200+
201+
//MARK: - Set Color
105202
public extension NSAttributedString {
106-
func setFont(for text: String, font: UIFont) -> NSAttributedString {
203+
func setColor(for text: String, color: NSColor) -> NSAttributedString {
107204
let ranges = self.string.ranges(of: text)
108205

109206
guard !ranges.isEmpty else {
@@ -114,31 +211,11 @@ public extension NSAttributedString {
114211
let newStr = self.mutableCopy() as! NSMutableAttributedString
115212
newStr.beginEditing()
116213
for nsRange in nsRanges {
117-
newStr.addAttribute(.font, value: font, range: nsRange)
118-
}
119-
newStr.endEditing()
120-
return newStr
121-
}
122-
123-
func setFont(for words: [String], font: UIFont) -> NSAttributedString {
124-
let newStr = self.mutableCopy() as! NSMutableAttributedString
125-
newStr.beginEditing()
126-
127-
for word in words {
128-
let ranges = self.string.ranges(of: word)
129-
130-
guard !ranges.isEmpty else {
131-
continue
132-
}
133-
134-
let nsRanges = ranges.map { NSRange($0, in: self.string) }
135-
136-
for nsRange in nsRanges {
137-
newStr.addAttribute(.font, value: font, range: nsRange)
138-
}
214+
newStr.addAttribute(.foregroundColor, value: color, range: nsRange)
139215
}
140216
newStr.endEditing()
141-
142217
return newStr
143218
}
144219
}
220+
221+
#endif

Sources/SwiftUI-Kit/Extensions/String.swift

+15
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,28 @@ extension String: Identifiable {
1212
public var id: String { self }
1313
}
1414

15+
#if os(iOS)
16+
import UIKit
17+
1518
public extension String {
1619
func widthOfString(usingFont font: UIFont) -> CGFloat {
1720
let fontAttributes = [NSAttributedString.Key.font: font]
1821
let size = self.size(withAttributes: fontAttributes)
1922
return size.width
2023
}
2124
}
25+
#else
26+
import AppKit
27+
28+
public extension String {
29+
func widthOfString(usingFont font: NSFont) -> CGFloat {
30+
let fontAttributes = [NSAttributedString.Key.font: font]
31+
let size = self.size(withAttributes: fontAttributes)
32+
return size.width
33+
}
34+
}#endif
35+
36+
2237

2338
public extension StringProtocol {
2439
func index<S: StringProtocol>(of string: S, options: String.CompareOptions = []) -> Index? {

Sources/SwiftUI-Kit/Extensions/Text+NSAttributedString.swift

+14-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@
66
//
77

88
import SwiftUI
9+
#if os(iOS)
10+
import UIKit
11+
typealias LocalColor = UIColor
12+
typealias LocalFont = UIFont
13+
14+
#else
15+
import AppKit
16+
typealias LocalColor = NSColor
17+
typealias LocalFont = NSFont
18+
#endif
919

1020
public extension Text {
1121
init(_ astring: NSAttributedString) {
@@ -15,11 +25,11 @@ public extension Text {
1525

1626
var t = Text(astring.attributedSubstring(from: range).string)
1727

18-
if let color = attrs[NSAttributedString.Key.foregroundColor] as? UIColor {
28+
if let color = attrs[NSAttributedString.Key.foregroundColor] as? LocalColor {
1929
t = t.foregroundColor(Color(color))
2030
}
2131

22-
if let font = attrs[NSAttributedString.Key.font] as? UIFont {
32+
if let font = attrs[NSAttributedString.Key.font] as? LocalFont {
2333
t = t.font(.init(font))
2434
}
2535

@@ -28,7 +38,7 @@ public extension Text {
2838
}
2939

3040
if let striked = attrs[NSAttributedString.Key.strikethroughStyle] as? NSNumber, striked != 0 {
31-
if let strikeColor = (attrs[NSAttributedString.Key.strikethroughColor] as? UIColor) {
41+
if let strikeColor = (attrs[NSAttributedString.Key.strikethroughColor] as? LocalColor) {
3242
t = t.strikethrough(true, color: Color(strikeColor))
3343
} else {
3444
t = t.strikethrough(true)
@@ -40,7 +50,7 @@ public extension Text {
4050
}
4151

4252
if let underline = attrs[NSAttributedString.Key.underlineStyle] as? NSNumber, underline != 0 {
43-
if let underlineColor = (attrs[NSAttributedString.Key.underlineColor] as? UIColor) {
53+
if let underlineColor = (attrs[NSAttributedString.Key.underlineColor] as? LocalColor) {
4454
t = t.underline(true, color: Color(underlineColor))
4555
} else {
4656
t = t.underline(true)

Sources/SwiftUI-Kit/Extensions/UIFont.swift

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
// Created by Vladyslav Fil on 22.09.2021.
66
//
77

8+
#if canImport(UIKit)
89
import UIKit
910

1011
public extension UIFont {
@@ -20,3 +21,4 @@ public extension UIFont {
2021
return max(CGFloat(ceilf(Float(boundingBox.height))), lineHeight)
2122
}
2223
}
24+
#endif

Sources/SwiftUI-Kit/Extensions/UIFontTextStyle.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
// Created by Vladyslav Fil on 22.09.2021.
66
//
77

8+
#if os(iOS)
89
import SwiftUI
9-
1010
@available(iOS 14, *)
1111
public extension UIFont.TextStyle {
1212
init?(_ textStyle: Font.TextStyle) {
@@ -31,3 +31,4 @@ public extension UIFont.TextStyle {
3131
self = style
3232
}
3333
}
34+
#endif

Sources/SwiftUI-Kit/Extensions/View.swift

+4
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ public extension View where Self: Equatable {
8080
EquatableView(content: self)
8181
}
8282
}
83+
#if os(iOS)
8384

8485
//MARK: - Hide Navigation Bar
8586
public extension View {
@@ -142,6 +143,8 @@ private struct KeyboardPaddingModifier: ViewModifier {
142143
}
143144
}
144145

146+
#endif
147+
145148
//MARK: - Clickable Clear Background
146149
public extension View {
147150
func clickableClearBackground() -> some View {
@@ -163,3 +166,4 @@ public extension View {
163166
}
164167
}
165168
}
169+

Sources/SwiftUI-Kit/ViewModifiers/PullToRefresh.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import Foundation
99
import SwiftUI
1010
import Combine
1111

12-
@available(iOS 15, *)
12+
@available(iOS 15, macOS 12.0, *)
1313
fileprivate struct PullToRefreshModifier: ViewModifier {
1414
@Binding var isRefreshing: Bool
1515
@StateObject var handler = ContinuationHandler()
@@ -40,7 +40,7 @@ public extension View {
4040

4141
@ViewBuilder
4242
func pullToRefresh(isRefreshing: Binding<Bool>) -> some View {
43-
if #available(iOS 15, *) {
43+
if #available(iOS 15,macOS 12.0, *) {
4444
self.modifier(PullToRefreshModifier(isRefreshing: isRefreshing))
4545
} else {
4646
self

Sources/SwiftUI-Kit/Views/MailView.swift

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
// Created by Vladyslav Fil on 22.09.2021.
66
//
77

8+
#if canImport(UIKit)
89
import SwiftUI
910
import MessageUI
1011

@@ -67,3 +68,4 @@ public struct MailView: UIViewControllerRepresentable {
6768
public func updateUIViewController(_ uiViewController: MFMailComposeViewController, context: Context) {}
6869
}
6970

71+
#endif

Sources/SwiftUI-Kit/Views/PencilKitView.swift

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import SwiftUI
99
import PencilKit
10+
#if os(iOS)
1011

1112
@available(iOS 14, *)
1213
public struct PencilKitView : UIViewRepresentable {
@@ -49,3 +50,4 @@ extension Coordinator: PKCanvasViewDelegate {
4950
onChanged()
5051
}
5152
}
53+
#endif

0 commit comments

Comments
 (0)