๐ฑ iOS
[SwiftUI] NavigationLink์ isActive ๊ณต์ ์ด์ & ํด๊ฒฐ
์ฑ์ ๋ง๋ค๋ค๋ณด๋ฉด List NavigationLink๋ฅผ ๋ง๋ค์ด์ ํด๋น cell์ ํด๋ฆญํ๋ฉด ํ๋ฉด์ด ์ ํ๋๋ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ ๋๊ฐ ์์ต๋๋ค. ์๋๋ NavigationLink List์ ๊ธฐ๋ณธ์ ์ธ ์ฝ๋ ์ ๋๋ค. @State var list = ["A","B","C"] var body: some View { NavigationView{ List{ ForEach(list, id:\.self){ data in NavigationLink { Text("Page Name: \(data)") // .navigationBarBackButtonHidden(true) } label: { Text("Go \(data)") } } } } } ๋ง์ฝ ์ ํ๋ ํ์ด์ง์ Back๋ฒํผ์ ์์ ๊ณ ์ปค์คํ ํ๊ณ ์ถ์ ๋๋ ์ด๋ป๊ฒ ํด์ผํ ๊น ? ์ฒซ..
[SwiftUI] TabView ํ์ด์ง ์ด๋์ TabBar , NavigationBar Hidden ์ฒ๋ฆฌํ๊ธฐ
์ผ์ฃผ์ผ ์ฝ์งํ๊ณ ์์ฑํ๋ ํธ๋ฌ๋ธ์ํ .. ์ฐ์ ๋๋ TabView์์ NavigationView๋ฅผ ๋ด์ ํ์ด์ง ์ด๋์ ํ๊ณ ์ถ์๋ค. FirstView -> SecondView struct ContentView: View { var body: some View { TabView { NavigationView { FirstView() } .tabItem { Text("first") } } } } struct FirstView: View { var body: some View { ZStack{ Color.yellow VStack{ Text("FirstView") NavigationLink { SecondView() } label: { Text("Go SecondView") } } } } } struct Sec..
๋๋ฐ์ด์ค ํ๋ฉด๊ณ ์ portrait only
์ฑ์ ๋ง๋ค๋ ๊ฐ๋กํ๋ฉด์ ๊ณ ๋ คํ์ง ์๊ธฐ ์ํด landscape ๋ชจ๋๋ฅผ ์ง์ํ์ง ์๋ ๋ฐฉ๋ฒ์ ๋๋ค. UIKit๋ก ๊ตฌํํ๋ ๊ฒฝ์ฐ (Storyboard) AppDelegate.swift์ ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค. func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { return UIInterfaceOrientationMask.portrait } SwiftUI๋ก ๊ตฌํํ๋ ๊ฒฝ์ฐ ๋๋ ํ ๋ฆฌ์ ํ๋ก์ ํธ๋ฅผ ๋๋ฅด๊ณ TARGETS์ ์๋ ํ๋ก์ ํธ๋ฅผ ์ ํํฉ๋๋ค. Info -> Supported interface orientations ์ฌ๊ธฐ์ ์ง์ํ๊ณ ์ ํ..
[SwiftUI] Grid์์ฑ
Grid์ ์์ฑ์ ๋ํด์ ์์ธํ ์์๋ณด์. Grid์ ์ข ๋ฅ : LazyHGrid, LazyVGrid ์์ฑ : fixed, flexible, adaptive LazyVGrid ๋ฐ์ดํฐ๋ฅผ ์์ง์ผ๋ก ๋์ดํ๊ณ ์ ํ ๋ ์ฌ์ฉํฉ๋๋ค. ์์ง์ผ๋ก ๋์ดํ๊ธฐ ๋๋ฌธ์ column์ ์ฌ์ฉํฉ๋๋ค. column์ ์ธ๋ก ํ ์ค์ ์๋ฏธํฉ๋๋ค. var body: some View { LazyVGrid(columns: columns) { ForEach(0..
URLSession์ ํตํดJSON ๊ฐ์ ธ์ค๊ธฐ (2)
SwiftUI ์ด ๊ธ์ alamofire์ ๊ฐ์ ์ธ๋ถ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๋ ์์ฃผ ๊ธฐ์ด์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค! mockapi.io์์ ์ํ์ ๋ง๋ค๋ฉด ์๋์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํด ์ค๋๋ค. https://62bbeeb36b1401736cecefcf.mockapi.io/user ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑํ์ต๋๋ค. struct User: Codable, Identifiable { var createdAt: String var name: String var avatar: String var id: String } json๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ๋ฉ์ธ์ผ๋ก ์์ฑ๋๋ class๋ ์ด ์ ๊ธ๊ณผ ๋์ผํฉ๋๋ค. ๋๋ณด๊ธฐ class network { func getJSON(completion : @escaping ([User]) ->..
URLSession์ ํตํดJSON ๊ฐ์ ธ์ค๊ธฐ (1)
SwiftUI ์ด ๊ธ์ alamofire์ ๊ฐ์ ์ธ๋ถ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๋ ์์ฃผ ๊ธฐ์ด์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค! json data๋ฅผ ๊ฐ์ ธ์ฌ ์ํ๋งํฌ: https://jsonplaceholder.typicode.com/todos ์ ์ฌ์ดํธ์์ ๋ฐ์ json์ ํํ๋ ๋ค์๊ณผ ๊ฐ๋ค. Todo๊ฐ Codable, Identifiable ํ๋กํ ์ฝ์ ์ฑํํด์ผ ํ๋ค. ๊ทธ ์ด์ ๋ ๊ฐ๊ฐ Codable : JSONDecoder()์์ ์ฌ์ฉํ๊ธฐ ์ํจ Identifiable : ๋ฐ์ดํฐ๋ฅผ List์์ ๋ฆฌ์คํ ํ ๋ ์ฌ์ฉํ๊ธฐ ์ํจ struct Todo: Codable, Identifiable { var userId: Int var id: Int var title: String var completed: Bool } network.swift..
Passing Data (์ง์ ์ ๋ฌ๋ฐฉ์)
๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ์ฌ์ฏ๊ฐ์ง ๋ฐฉ๋ฒ์ ์์๋ณด์ ! 1. instance property ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ์ ViewController ํ๋กํผํฐ์ ๊ฐ์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ์ property๋ฅผ ์ ์ธํ๊ณ , ๊ทธ property์ ๊ฐ์ UI์ ์ ์ฉํ๋ ์๋ฆฌ์ด๋ค. ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ์ ViewController propertyDataViewController.swift var passingData = "" //์ฌ๊ธฐ์ ๋ฐ์ดํฐ ์ ๋ฌ๋ฐ์ ์์ @IBOutlet weak var setPassingData: UILabel! //์ฌ๊ธฐ์ ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ ์ ์ฉ override func viewDidLoad() { super.viewDidLoad() setPassingData.text = passingData } ๋ฐ์ดํฐ๋ฅผ ..
Auto Layout 1 [Why?]
๐ Auto Layout ์ด๋ ? ์ ์ฝ์กฐ๊ฑด(Constraints)์ ๋ฐ๋ผ ๋ชจ๋ ๋ทฐ์ ํฌ๊ธฐ์ ์์น๋ฅผ ๋์ ์ผ๋ก ์ง์ ํ๋ ๊ฒ ์ด๊ฒ ์ ํ์ํ์ง? ๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ Frame-Base Layout์ ๋ํ ์ฌ์ ์ง์์ด ํ์ํ๋ค. Frame-Base Layout Xcode ์์์ ์ด๋ฏธ์ง View์ ํฌ๊ธฐ์ ์์น๋ฅผ ์์ ๊ฐ์ด ์ง์ ํ๊ณ Simulator๋ก ์คํ์์ผ๋ณด์. (reviewํ๋ฉด์ iPhone11๋ก ํ๊ณ , ํ๋ ์ ์ ํ์๊ฐ ๋จ๋ ์ค๊ฐ์ผ๋ก ์์น๋ฅผ ์ง์ ํ์) ์คํํ๋ฉด iPhone11์ ์์๊ฒ ์ ์ค์์ ์ ๋นํ ํฌ๊ธฐ๋ก ์ด๋ฏธ์ง๊ฐ ๋ฐฐ์น๋๋ค. ํ์ง๋ง SE๊ฐ์ ๊ฒฝ์ฐ์๋ ์ค์์ ๋ฐฐ์น ๋์ง ์๊ณ ์์น๊ฐ ์ ๋งคํ๋ค. ๊ทธ๋ฌ๋ฉด ์ด๋ฒ์๋ landscape(๊ฐ๋ก๋ชจ๋) ๋ก ๋๋ ค ๋ณด์ โ ์ด๋ฏธ์ง๊ฐ ์ค์ข ๋๋ค. ์ด์ ๋, ์ฒ์์ x์ y์ ๊ฐ์..
[Stanford iOS] enum์ ์๋ํจ
powerful ํ enum์ ์ ๋ฆฌํด๋ณด์. (๋ณธ ์ ๋ฆฌ ๋ด์ฉ์ Stanford iOS๋ฅผ ๋ฐํ์ผ๋ก ํฉ๋๋ค.) enum์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ์กฐํด ์ฃผ์ธ์. [Swift] ์ด๊ฑฐํ(Enumerations) ์ด๊ฑฐํ์ด๋ ? ๊ณตํต๋ ์ฃผ์ ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๋ค์ ๋ชจ์ ๋ํ๋ด๋ ์๋ฃํ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์๋ฅผ๋ค์ด ๋ด๊ฐ ํ๋ก๊ทธ๋๋ฐ ํ ๋ด์ฉ์ด ๊ณผ์ผ์ ๊ดํ ๊ฒ์ด๊ณ ์์ผ๋ก ๊ณผ์ผ ๋ณ์๋ฅผ ์์ฃผ ์ฌ์ฉํ๋ค๊ณ ์๊ฐ 990427.tistory.com ์ฐ๋ฆฌ๋ ๊ณ์ฐ๊ธฐ operation ๊ตฌํ์ ์ํด์ ๋ค์๊ณผ ๊ฐ์ด ์ด๊ฑฐํ ๋ณ์๋ฅผ ๋ง๋ค์๋ค. ์ฌ๊ธฐ์ associated value๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ type์ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์๊ณ , value๋ฅผ ์ง์ ํ ์ ์๋ค. ์๋ operation ๋์ ๋๋ฆฌ๋ฅผ ๋ณด๋ฉด, value๊ฐ associated ..
[Stanford iOS] ๋ฒ์ ๋ฌธ์ ์ ์ํ ๊ฐ์ข error ํด๊ฒฐ
๊ณ ์ ๊ฐ์๋ผ ๋ฒ์ ์ด swift2 / iOS9 ์ด๋ค ๋ณด๋ ๋ง์ ์๋ฌ์ ๋ถ๋ชํ๋ค 2022๋ ์ Stanford iOS๋ฅผ ๋ฐ๋ผํ ๋ ๋ฐ์ํ๋ ๊ฐ์ข ์๋ฌ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์. ๐ [Section1] ๊ณ์ฐ๊ธฐ sender.currentTitle์ nil error ์๋ง ์ด ๊ธ์ ์ฝ๋ ๋ถ๋ค์ UIButton์ ํด๋ฆญํด์ sender.currentTitle์ ๊ฐ์ ธ์ฌ ๋ nil error์ ๋ง์ฃผํ์ ๊ฒ์ด๋ค. ์ด์ ๋ xcode13 ์ด์ ๊น์ง๋ UIButton์ style์ ๊ธฐ๋ณธ ๊ฐ์ด Default ์์ง๋ง, xcode13๋ถํฐ๋ UIButton์ style์ ๊ธฐ๋ณธ ๊ฐ์ด Plain ์ผ๋ก ๋ฐ๋์๊ธฐ ๋๋ฌธ์, style์ Default ๋ก ๋ฐ๊พธ์ด ์ฃผ๋ฉด ํด๊ฒฐ๋๋ค. ๐ [Section2] ๋ ธ์น ํ์์ผ๋ก ์ธํ AutoLayout ์ iP..