Skip to content

Commit 383944f

Browse files
committed
add some feature, add IdentifiedArray
1 parent 1657fb3 commit 383944f

File tree

18 files changed

+362
-80
lines changed

18 files changed

+362
-80
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<array/>
5+
</plist>
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>SchemeUserState</key>
6+
<dict>
7+
<key>Builder.xcscheme_^#shared#^_</key>
8+
<dict>
9+
<key>orderHint</key>
10+
<integer>1</integer>
11+
</dict>
12+
<key>DataStructures.xcscheme_^#shared#^_</key>
13+
<dict>
14+
<key>orderHint</key>
15+
<integer>2</integer>
16+
</dict>
17+
<key>Transform.xcscheme_^#shared#^_</key>
18+
<dict>
19+
<key>orderHint</key>
20+
<integer>3</integer>
21+
</dict>
22+
<key>swift-extension-Package.xcscheme_^#shared#^_</key>
23+
<dict>
24+
<key>orderHint</key>
25+
<integer>0</integer>
26+
</dict>
27+
</dict>
28+
<key>SuppressBuildableAutocreation</key>
29+
<dict>
30+
<key>Builder</key>
31+
<dict>
32+
<key>primary</key>
33+
<true/>
34+
</dict>
35+
<key>DataStructures</key>
36+
<dict>
37+
<key>primary</key>
38+
<true/>
39+
</dict>
40+
<key>Transform</key>
41+
<dict>
42+
<key>primary</key>
43+
<true/>
44+
</dict>
45+
<key>UnitTests</key>
46+
<dict>
47+
<key>primary</key>
48+
<true/>
49+
</dict>
50+
<key>swift-extension</key>
51+
<dict>
52+
<key>primary</key>
53+
<true/>
54+
</dict>
55+
</dict>
56+
</dict>
57+
</plist>

Package.resolved

Lines changed: 75 additions & 59 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Package.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,27 @@ let package = Package(
2222
.package(url: "https://github.com/Quick/Quick.git", from: "4.0.0"),
2323
.package(url: "https://github.com/Quick/Nimble.git", from: "9.2.0"),
2424
.package(url: "https://github.com/apple/swift-docc-plugin", from: "1.1.0"),
25+
.package(url: "https://github.com/apple/swift-collections", from: "1.0.2"),
26+
.package(url: "https://github.com/pointfreeco/swift-identified-collections", from: "1.0.0"),
2527
],
2628
targets: [
2729
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
2830
// Targets can depend on other targets in this package, and on products in packages this package depends on.
2931
.target(
3032
name: "Transform",
31-
dependencies: []),
33+
dependencies: [
34+
.product(name: "IdentifiedCollections", package: "swift-identified-collections"),
35+
.product(name: "OrderedCollections", package: "swift-collections"),
36+
]),
3237
.target(
3338
name: "DataStructures",
3439
dependencies: []),
3540
.target(
3641
name: "Builder",
37-
dependencies: []),
42+
dependencies: [
43+
.product(name: "IdentifiedCollections", package: "swift-identified-collections"),
44+
.product(name: "OrderedCollections", package: "swift-collections"),
45+
]),
3846
.testTarget(
3947
name: "UnitTests",
4048
dependencies: ["DataStructures", "Transform", "Quick", "Nimble"]),
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import IdentifiedCollections
2+
import Foundation
3+
4+
@available(iOS 13, macOS 12, tvOS 13, watchOS 6, *)
5+
public extension IdentifiedArray where Element: Identifiable {
6+
init(@ArrayBuilder<Element> builder: () -> [Element]) where ID == Element.ID {
7+
var identifiedArray: IdentifiedArrayOf<Element> = []
8+
let items = builder()
9+
for item in items {
10+
identifiedArray.updateOrAppend(item)
11+
}
12+
self = identifiedArray
13+
}
14+
}

Sources/Transform/Collection/Dictionary+.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,14 @@ public extension Dictionary where Value: Hashable {
2222
func has(key: Self.Key) -> Bool {
2323
self[key] != nil
2424
}
25+
26+
func pick(keys: [Key]) -> [Key: Value] {
27+
keys.reduce(into: [Key: Value]()) { partialResult, item in
28+
partialResult[item] = self[item]
29+
}
30+
}
31+
32+
func keys(for value: Value) -> [Key] {
33+
return keys.filter({ self[$0] == value})
34+
}
2535
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import IdentifiedCollections
2+
3+
public extension IdentifiedArray {
4+
func toArray() -> [Element] {
5+
var array: [Element] = []
6+
for value in self {
7+
array.append(value)
8+
}
9+
return array
10+
}
11+
}
12+
13+
public extension IdentifiedArray where Element: Hashable {
14+
func toSet() -> Set<Element> {
15+
toArray().toSet()
16+
}
17+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
public extension Bool {
2+
3+
func toInt() -> Int {
4+
self ? 1 : 0
5+
}
6+
7+
func toString() -> String {
8+
self ? "true" : "false"
9+
}
10+
}

Sources/Transform/Fundamental/Double+.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,20 @@ public extension Double {
2020
func toFloat() -> Float {
2121
toString().toFloat()!
2222
}
23+
24+
func toNano() -> Double {
25+
self * 1_000_000_000
26+
}
27+
28+
func toGiga() -> Double {
29+
self / 1_000_000_000
30+
}
31+
32+
var nano: Double {
33+
self * 1_000_000_000
34+
}
35+
36+
var giga: Double {
37+
self / 1_000_000_000
38+
}
2339
}

0 commit comments

Comments
 (0)