add Cat Screen and navigate from gesture
parent
0066e66a47
commit
7d9e69f473
|
@ -7,6 +7,8 @@
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
|
2AC2AEF22B9F53D300CD717D /* Kities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC2AEF12B9F53D300CD717D /* Kities.swift */; };
|
||||||
|
2AC2AEF52B9F584F00CD717D /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 2AC2AEF42B9F584F00CD717D /* SDWebImageSwiftUI */; };
|
||||||
2AD701EB2B9EAA970058791B /* commentsApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AD701EA2B9EAA970058791B /* commentsApp.swift */; };
|
2AD701EB2B9EAA970058791B /* commentsApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AD701EA2B9EAA970058791B /* commentsApp.swift */; };
|
||||||
2AD701ED2B9EAA970058791B /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AD701EC2B9EAA970058791B /* ContentView.swift */; };
|
2AD701ED2B9EAA970058791B /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AD701EC2B9EAA970058791B /* ContentView.swift */; };
|
||||||
2AD701EF2B9EAA990058791B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2AD701EE2B9EAA990058791B /* Assets.xcassets */; };
|
2AD701EF2B9EAA990058791B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2AD701EE2B9EAA990058791B /* Assets.xcassets */; };
|
||||||
|
@ -18,6 +20,7 @@
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
2AC2AEF12B9F53D300CD717D /* Kities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Kities.swift; sourceTree = "<group>"; };
|
||||||
2AD701E72B9EAA970058791B /* comments.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = comments.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
2AD701E72B9EAA970058791B /* comments.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = comments.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
2AD701EA2B9EAA970058791B /* commentsApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = commentsApp.swift; sourceTree = "<group>"; };
|
2AD701EA2B9EAA970058791B /* commentsApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = commentsApp.swift; sourceTree = "<group>"; };
|
||||||
2AD701EC2B9EAA970058791B /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
|
2AD701EC2B9EAA970058791B /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
|
||||||
|
@ -32,6 +35,7 @@
|
||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
2AC2AEF52B9F584F00CD717D /* SDWebImageSwiftUI in Frameworks */,
|
||||||
2AD701FA2B9EAB540058791B /* Alamofire in Frameworks */,
|
2AD701FA2B9EAB540058791B /* Alamofire in Frameworks */,
|
||||||
2AF729782B9F060200B4C04E /* DynamicColor in Frameworks */,
|
2AF729782B9F060200B4C04E /* DynamicColor in Frameworks */,
|
||||||
2AD701FC2B9EAB540058791B /* AlamofireDynamic in Frameworks */,
|
2AD701FC2B9EAB540058791B /* AlamofireDynamic in Frameworks */,
|
||||||
|
@ -60,6 +64,7 @@
|
||||||
2AD701E92B9EAA970058791B /* comments */ = {
|
2AD701E92B9EAA970058791B /* comments */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
2AC2AEF12B9F53D300CD717D /* Kities.swift */,
|
||||||
2AF729752B9EDA0B00B4C04E /* Info.plist */,
|
2AF729752B9EDA0B00B4C04E /* Info.plist */,
|
||||||
2AD701EA2B9EAA970058791B /* commentsApp.swift */,
|
2AD701EA2B9EAA970058791B /* commentsApp.swift */,
|
||||||
2AD701EC2B9EAA970058791B /* ContentView.swift */,
|
2AD701EC2B9EAA970058791B /* ContentView.swift */,
|
||||||
|
@ -98,6 +103,7 @@
|
||||||
2AD701F92B9EAB540058791B /* Alamofire */,
|
2AD701F92B9EAB540058791B /* Alamofire */,
|
||||||
2AD701FB2B9EAB540058791B /* AlamofireDynamic */,
|
2AD701FB2B9EAB540058791B /* AlamofireDynamic */,
|
||||||
2AF729772B9F060200B4C04E /* DynamicColor */,
|
2AF729772B9F060200B4C04E /* DynamicColor */,
|
||||||
|
2AC2AEF42B9F584F00CD717D /* SDWebImageSwiftUI */,
|
||||||
);
|
);
|
||||||
productName = comments;
|
productName = comments;
|
||||||
productReference = 2AD701E72B9EAA970058791B /* comments.app */;
|
productReference = 2AD701E72B9EAA970058791B /* comments.app */;
|
||||||
|
@ -130,6 +136,7 @@
|
||||||
packageReferences = (
|
packageReferences = (
|
||||||
2AD701F82B9EAB520058791B /* XCRemoteSwiftPackageReference "Alamofire" */,
|
2AD701F82B9EAB520058791B /* XCRemoteSwiftPackageReference "Alamofire" */,
|
||||||
2AF729762B9F060100B4C04E /* XCRemoteSwiftPackageReference "DynamicColor" */,
|
2AF729762B9F060100B4C04E /* XCRemoteSwiftPackageReference "DynamicColor" */,
|
||||||
|
2AC2AEF32B9F584F00CD717D /* XCRemoteSwiftPackageReference "SDWebImageSwiftUI" */,
|
||||||
);
|
);
|
||||||
productRefGroup = 2AD701E82B9EAA970058791B /* Products */;
|
productRefGroup = 2AD701E82B9EAA970058791B /* Products */;
|
||||||
projectDirPath = "";
|
projectDirPath = "";
|
||||||
|
@ -157,6 +164,7 @@
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
2AC2AEF22B9F53D300CD717D /* Kities.swift in Sources */,
|
||||||
2AD701FE2B9EAFF00058791B /* Api.swift in Sources */,
|
2AD701FE2B9EAFF00058791B /* Api.swift in Sources */,
|
||||||
2AD701ED2B9EAA970058791B /* ContentView.swift in Sources */,
|
2AD701ED2B9EAA970058791B /* ContentView.swift in Sources */,
|
||||||
2AD701EB2B9EAA970058791B /* commentsApp.swift in Sources */,
|
2AD701EB2B9EAA970058791B /* commentsApp.swift in Sources */,
|
||||||
|
@ -369,6 +377,14 @@
|
||||||
/* End XCConfigurationList section */
|
/* End XCConfigurationList section */
|
||||||
|
|
||||||
/* Begin XCRemoteSwiftPackageReference section */
|
/* Begin XCRemoteSwiftPackageReference section */
|
||||||
|
2AC2AEF32B9F584F00CD717D /* XCRemoteSwiftPackageReference "SDWebImageSwiftUI" */ = {
|
||||||
|
isa = XCRemoteSwiftPackageReference;
|
||||||
|
repositoryURL = "https://github.com/SDWebImage/SDWebImageSwiftUI";
|
||||||
|
requirement = {
|
||||||
|
kind = upToNextMajorVersion;
|
||||||
|
minimumVersion = 3.0.0;
|
||||||
|
};
|
||||||
|
};
|
||||||
2AD701F82B9EAB520058791B /* XCRemoteSwiftPackageReference "Alamofire" */ = {
|
2AD701F82B9EAB520058791B /* XCRemoteSwiftPackageReference "Alamofire" */ = {
|
||||||
isa = XCRemoteSwiftPackageReference;
|
isa = XCRemoteSwiftPackageReference;
|
||||||
repositoryURL = "https://github.com/Alamofire/Alamofire";
|
repositoryURL = "https://github.com/Alamofire/Alamofire";
|
||||||
|
@ -388,6 +404,11 @@
|
||||||
/* End XCRemoteSwiftPackageReference section */
|
/* End XCRemoteSwiftPackageReference section */
|
||||||
|
|
||||||
/* Begin XCSwiftPackageProductDependency section */
|
/* Begin XCSwiftPackageProductDependency section */
|
||||||
|
2AC2AEF42B9F584F00CD717D /* SDWebImageSwiftUI */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
package = 2AC2AEF32B9F584F00CD717D /* XCRemoteSwiftPackageReference "SDWebImageSwiftUI" */;
|
||||||
|
productName = SDWebImageSwiftUI;
|
||||||
|
};
|
||||||
2AD701F92B9EAB540058791B /* Alamofire */ = {
|
2AD701F92B9EAB540058791B /* Alamofire */ = {
|
||||||
isa = XCSwiftPackageProductDependency;
|
isa = XCSwiftPackageProductDependency;
|
||||||
package = 2AD701F82B9EAB520058791B /* XCRemoteSwiftPackageReference "Alamofire" */;
|
package = 2AD701F82B9EAB520058791B /* XCRemoteSwiftPackageReference "Alamofire" */;
|
||||||
|
|
|
@ -17,6 +17,24 @@
|
||||||
"revision" : "d9beca13ca85baa50ee29832d0db5129fba69630",
|
"revision" : "d9beca13ca85baa50ee29832d0db5129fba69630",
|
||||||
"version" : "5.0.1"
|
"version" : "5.0.1"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "sdwebimage",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/SDWebImage/SDWebImage.git",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "73b9397cfbd902f606572964055464903b1d84c6",
|
||||||
|
"version" : "5.19.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "sdwebimageswiftui",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/SDWebImage/SDWebImageSwiftUI",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "e057a3cda6aabfa94eda0f604518f76c5efe8ca1",
|
||||||
|
"version" : "3.0.0"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"version" : 2
|
"version" : 2
|
||||||
|
|
Binary file not shown.
|
@ -20,5 +20,37 @@
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
</BreakpointProxy>
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "8E4BB86A-A28C-44AB-ADB4-A59ED7DDC3AC"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "comments/ContentView.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "143"
|
||||||
|
endingLineNumber = "143"
|
||||||
|
landmarkName = "DetailedCardView"
|
||||||
|
landmarkType = "14">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "23C31929-321F-447B-B75D-114222BE0A65"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "comments/Kities.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "40"
|
||||||
|
endingLineNumber = "40"
|
||||||
|
landmarkName = "body"
|
||||||
|
landmarkType = "24">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
</Breakpoints>
|
</Breakpoints>
|
||||||
</Bucket>
|
</Bucket>
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
<key>comments.xcscheme_^#shared#^_</key>
|
<key>comments.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>1</integer>
|
<integer>0</integer>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
|
|
|
@ -49,6 +49,8 @@ struct BalanceView: View {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct Cat: Hashable {}
|
||||||
|
|
||||||
struct ContentView: View {
|
struct ContentView: View {
|
||||||
@State var posts: [PostStruct] = []
|
@State var posts: [PostStruct] = []
|
||||||
|
|
||||||
|
@ -57,7 +59,9 @@ struct ContentView: View {
|
||||||
ZStack{
|
ZStack{
|
||||||
Color.bg.ignoresSafeArea()
|
Color.bg.ignoresSafeArea()
|
||||||
VStack {
|
VStack {
|
||||||
Image(.logo)
|
NavigationLink(value: Cat()) {
|
||||||
|
Image(.logo)
|
||||||
|
}
|
||||||
BalanceView().padding(.bottom, 24)
|
BalanceView().padding(.bottom, 24)
|
||||||
CardsView()
|
CardsView()
|
||||||
|
|
||||||
|
@ -69,6 +73,9 @@ struct ContentView: View {
|
||||||
DetailedCardView(card: card)
|
DetailedCardView(card: card)
|
||||||
.navigationBarHidden(true)
|
.navigationBarHidden(true)
|
||||||
})
|
})
|
||||||
|
.navigationDestination(for: Cat.self, destination: {cat in
|
||||||
|
KityView()
|
||||||
|
})
|
||||||
.navigationBarHidden(true)
|
.navigationBarHidden(true)
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
//
|
||||||
|
// Kities.swift
|
||||||
|
// comments
|
||||||
|
//
|
||||||
|
// Created by Георгий Сигалев on 11.03.2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import SwiftUI
|
||||||
|
import Alamofire
|
||||||
|
import SDWebImage
|
||||||
|
import SDWebImageSwiftUI
|
||||||
|
|
||||||
|
struct CatResponse: Identifiable, Decodable {
|
||||||
|
var id: String
|
||||||
|
var url: String
|
||||||
|
var width: Int
|
||||||
|
var height: Int
|
||||||
|
}
|
||||||
|
|
||||||
|
func fetchKities() async -> CatResponse? {
|
||||||
|
let result = await AF.request("https://api.thecatapi.com/v1/images/search").serializingDecodable([CatResponse].self).result
|
||||||
|
|
||||||
|
var data: [CatResponse] = []
|
||||||
|
|
||||||
|
do {
|
||||||
|
try data = result.get()
|
||||||
|
} catch {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return data[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct KityView: View {
|
||||||
|
@State var url: String?
|
||||||
|
@Environment(\.dismiss) private var dismiss
|
||||||
|
|
||||||
|
@ViewBuilder
|
||||||
|
var body: some View{
|
||||||
|
|
||||||
|
VStack {
|
||||||
|
if url != nil {
|
||||||
|
WebImage(url: URL(string: url!))
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Text("Загрузка...")
|
||||||
|
}
|
||||||
|
}.task {
|
||||||
|
guard let cat = (await fetchKities()) else {
|
||||||
|
dismiss()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self.url = cat.url
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue