๐ป ๊ฐ๋ฐ/iOS
Swift UI์์ ForEach๋ก View ์ฌ๋ฌ ๊ฐ ์ค๋ ์คํฐ๋์์ ๋ ์จ๋ฅผ ๋ณด์ฌ์ฃผ๋ ํ์ด์ง๋ฅผ Swift UI๋ก ๊ตฌํํ๋ ๊ณผ์ ๋ฅผ ์งํํ๋ค. HStack๊ณผ VStack์ ํ์ฉํด์ ๊ตฌํํ๋ ๊ณผ์ ์๊ณ ๊ตฌํ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค. ํ์ง๋ง ๊ตฌํ์ ์๋ฃํ๊ณ ๋ณด๋ ๋๋ถ๋ถ์ด ํ๋ ์ฝ๋ฉ๋์ด ์์ด์ ๊ฒน์น๋ ์ฝ๋๋ค์ด ๋ง์ ์ด๋ฅผ ์์ ํด์ฃผ๋ ์์
์ ์งํํ๋ค. ์๋ ์ฌ์ง์ ๋ณด๋ฉด ๋นจ๊ฐ์ ๋ทฐ ์์ ์ด๋ก์ ๋ทฐ๋ค์ด ๊ฐ์ ํํ๋ก ๋ฐฐ์น๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๊ธฐ์กด์๋ HStack ๋ด๋ถ์ VStack์ ์ฌ๋ฌ ๊ฐ ๋ฐฐ์นํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋๋ฐ, ์ด๋ฅผ ForEach๋ฅผ ํ์ฉํด์ VStack์ ์ฌ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์์ ํ๋ค. 1. ๊ธฐ์กด ์ฝ๋ struct DailyHourWeatherView: View { var body: some View { HS..
๐ป ๊ฐ๋ฐ/iOS
์ง๋ ์๊ฐ์ ๊ฐ์ธ์ ์ผ๋ก ํด๋ก์ ์ ๋ํด์ ์ข ๋ ์์๋ดค๋๋ฐ ์ค๋ ๊ฐ์์์๋ ํด๋ก์ ์ ๋ํ ์ง๋๋ฅผ ๋๊ฐ๋ค. ๋ณต์ต ์ฐจ์์์ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉด์ ๋ค์ ํ ๋ฒ ์ ๋ฆฌํด๋ดค๋ค. ํด๋ก์ ํด๋ก์ ๋ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์๋ ์ฝ๋ ๋ธ๋ก์ด๋ค. ํด๋ก์ ์์๋ ์์์ ๋ณ์์ ๋ํ ์ฐธ์กฐ๋ฅผ ์บก์ณํ๊ณ ์ ์ฅํ ์ ์์ผ๋ฉฐ ํฌ๊ฒ 3๊ฐ์ง๋ก ๊ตฌ๋ถํ๋ค. ์ ์ญ ํจ์ ์ค์ฒฉ ํจ์ ํด๋ก์ ํํ์ 1. ์ ์ญ ํจ์ ์ฒซ ๋ฒ์งธ๋ก ์ ์ญํจ์๋ ์ฐ๋ฆฌ๊ฐ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฉด์ ์ ์ํ๊ณ ํธ์ถํ๋ ํจ์๋ค์ด๋ค. func ํค์๋๋ฅผ ํตํด ์ ์ํ๋ค. ์ ์ญํจ์๋ ์ด๋ฆ์ ๊ฐ์ง๊ณ ์๊ณ ์ด๋ ํ ๊ฐ๋ ์บก์ณํ์ง ์๋ ํด๋ก์ ์ด๋ค. func justFunction() -> String { return "KODO" } 2. ์ค์ฒฉ ํจ์ ๋ ๋ฒ์งธ๋ก ์ค์ฒฉ ํจ์๋ ์ด๋ฆ์ ๊ฐ์ง๊ณ ๋๋ฌ์ผ ํจ์๋ก๋ถํฐ ๊ฐ์ ์บก์ณํ ์ ์๋..
๐ป ๊ฐ๋ฐ/iOS
ํด๋ก์ ํด๋ก์ ๋ ๋ค์ํ ํํ๋ก ํํ์ด ๊ฐ๋ฅํ๋ค. ํํ ํด๋ก์ : ํจ์์ ๋ง์ง๋ง ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋๋ ํด๋ก์ ๋ ํํํด๋ก์ ๋ก, ํจ์ ๋ฐ์ ๊ตฌํ๋ ์ ์๋ค. ๋ฐํ ํ์
์๋ต : ์ปดํ์ผ๋ฌ๊ฐ ํด๋ก์ ์ ๋ฐํ ํ์
์ ์ ์ถํ ์ ์๋ ๊ฒฝ์ฐ, ๋ฐํ ํ์
์ ์๋ตํ ์ ์๋ค. ๋งค๊ฐ๋ณ์ ์ด๋ฆ ์๋ต : ๋งค๊ฐ๋ณ์์ ์ด๋ฆ์ด ํ์ ์๊ณ , ์ปดํ์ผ๋ก๊ฐ ํ์
์ ์ ์ถํ ์ ์๋ ๊ฒฝ์ฐ, ์ถ์ฝ๋ ์ ๋ฌ ์ธ์ ํํ๋ก ์ฌ์ฉํ ์ ์๋ค. ์์์ ๋ฐํ : ๋ฐํ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ, ํด๋ก์ ์ ๋งจ ๋ง์ง๋ง ์ค์์ return์ ์๋ตํ ์ ์๋ค. 1. ๋ฐํ ํ์
์๋ต calculate ํจ์์ method ๋งค๊ฐ๋ณ์๋ Intํ์ด ๋ฐํ๋๋ค๋ ๊ฒ์ ์ปดํ์ผ๋ฌ๋ ์๊ณ ์๊ธฐ์ ํด๋ก์ ธ์์ ๋ฐํ ํ์
์ ๋ช
์ํด์ฃผ์ง ์์๋ ๋๋ค. ํ์ง๋ง in ํค์๋๋ ์๋ตํ ์ ์๋ค. let res..
๐ป ๊ฐ๋ฐ/iOS
์ต์คํ
์
์ค์ํํธ์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ผ๋ก, ๊ตฌ์กฐ์ฒด, ํด๋์ค, ์ด๊ฑฐํ, ํ๋กํ ์ฝ ํ์
์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๊ฒ ํด์ค๋ค. ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ค๋ ํ์
์ ๊ตฌํ๋ ์์ค ์ฝ๋๋ฅผ ์์ง ๋ชปํ๋๋ผ๋ ํ์
๋ง ์๊ณ ์๋ค๋ฉด ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์๋ค. ์ต์คํ
์
์ผ๋ก ํ์
์ ์ถ๊ฐํ ์ ์๋ ๊ฒ๋ค์๋ ์ฐ์ฐ ํ์
ํ๋กํผํฐ / ์ฐ์ฐ ์ธ์คํด์ค ํ๋กํผํฐ ํ์
๋ฉ์๋ / ์ธ์คํด์ค ๋ฉ์๋ ์ด๊ธฐํ ์๋ธ์คํฌ๋ฆฝํธ ์ค์ฒฉ ํ์
ํน์ ํ๋กํ ์ฝ์ ์ค์ํ ์ ์๋๋ก ๊ธฐ๋ฅ ์ถ๊ฐ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์๋ ์์ง๋ง ๊ธฐ์กด์ ์กด์ฌํ๋ ๊ธฐ๋ฅ์ ์ฌ์ ์(override)๋ ๋ถ๊ฐ๋ฅํ๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์์๊ณผ์ ์ฐจ์ด์ด๋ค. ์์ VS ์ต์คํ
์
์์ - ํด๋์ค ํ์
์ ํ์ฉ - ์์ง์ ์ผ๋ก ํ์ฅ - ์ฌ์ ์ ๊ฐ๋ฅ ์ต์คํ
์
- ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ, ํ๋กํ ์ฝ ๋ฑ ๋ชจ๋ ํ์
์ ํ์ฉ - ์..
๐ป ๊ฐ๋ฐ/์ค๋์ ์ฝ์ง
๊ณต๊ณต๋ฐ์ดํฐ ํฌํธ์์ ํ๊ตญํ๊ฒฝ๊ณต๋จ์์ ์ ๊ณตํ๋ ๋๊ธฐ์ง ์ ๋ณด๋ฅผ ํตํด์ ๊ฐ๋จํ๊ฒ ์ธก์ ์๋ณ ๋๊ธฐ์ง ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ ์ฑ์ ๋ง๋ค์ด๋ณด๋ ค๊ณ ํ๋ค. ํ๊ตญํ๊ฒฝ๊ณต๋จ_์์ด์ฝ๋ฆฌ์_์ธก์ ์์ ๋ณด ๋๊ธฐ์ง ์ธก์ ์ ์ ๋ณด๋ฅผ ์กฐํํ๊ธฐ ์ํ ์๋น์ค๋ก TM ์ขํ๊ธฐ๋ฐ์ ๊ฐ๊น์ด ์ธก์ ์ ๋ฐ ์ธก์ ์ ๋ชฉ๋ก๊ณผ ์ธก์ ์์ ์ ๋ณด๋ฅผ ์กฐํํ ์ ์๋ค. โป ์ด์๊ณ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์ ํ ๊ฒฝ์ฐ ์์ด์ฝ๋ฆฌ์ OpenAPI ์ฌ์ฉ์ www.data.go.kr ๊ตฌํํ๋ ค๋ ์ฑ์ ์ด 3๊ฐ์ ViewController๋ก, ์ง์ญ๋ช
์ ๊ฒ์ํ ์ ์๋ ํ์ด์ง ํด๋น ์ง์ญ์ ์ธก์ ์ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๋ ํ์ด์ง ํน์ ์ธก์ ์์ ๋๊ธฐ์ง์ ์์ธ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋ ํ์ด์ง ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ์ฐ์ ์ง์ญ๋ช
์ ๊ฒ์ํ ์ ์๋ ํ์ด์ง์ธ ViewController๋ถํฐ ์ดํด๋ณด์. // // ViewControlle..
๐ป ๊ฐ๋ฐ/์ค๋์ ์ฝ์ง
Delegate๋ก ํน์ Cell์ ํด๋ฆญํ์ ๋ ์์ธ ์ ๋ณด ํ์ด์ง๋ก ์ด๋ํ๋๋ก ๊ตฌํํ๋ค. extension ViewController : UICollectionViewDelegate { func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { guard let viewController = self.storyboard?.instantiateViewController(identifier: "DiaryDetailViewController") as? DiaryDetailViewController else { return } let diary = self.diaryList[indexPath.row] ..
๐ป ๊ฐ๋ฐ/iOS
๊ณต๋ถํ ๊ฒ ๋ถ์คํธ์ฝ์ค - iOS ํ๋ก๊ทธ๋๋ฐ์ ์ํ ์ค์ํํธ ๊ธฐ์ด ์๊ฒ๋ ๊ฒ 1. ์ต์
๋ // someOptionalParm์ nil์ด ํ ๋น๋ ์ ์์ func someFunction(someOptionalParam: Int?) { // .... } /// someOptionalParm์ nil์ด ํ ๋น๋ ์ ์์ func someFunction(someOptionalParam: Int) { // .... } nil์ด ํ ๋น๋ ์ ์๋์ง ์๋์ง๋ฅผ ํํ nil์ ๊ฐ๋ฅ์ฑ์ ๋ช
์์ (์ฝ๋)์ผ๋ก ํํ ๊ฐ๋ฅ ์ต์
๋์ด ์๋ ๊ฒฝ์ฐ nil ์ฒดํฌ ์์ด ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅ nil๋ก ์ธํ ์์ธ ์ํฉ์ ์ต์ํ 2. ์ต์
๋ ํํ ๋ฐฉ๋ฒ // ์์์ ์ถ์ถ ์ต์
๋ var optionalValue: Int! = 10 switch optionVa..
๐ป ๊ฐ๋ฐ/iOS
๊ณต๋ถํ ๊ฒ ๋ถ์คํธ์ฝ์ค - iOS ํ๋ก๊ทธ๋๋ฐ์ ์ํ ์ค์ํํธ ๊ธฐ์ด ์๊ฒ๋ ๊ฒ 1. ๋งค๊ฐ๋ณ์ ๊ธฐ๋ณธ ๊ฐ func setUserInfo(name : String, age : Int, region : String = "Deajeon") {} ํจ์๋ฅผ ์ ์ํ ๋ ๋งค๊ฐ๋ณ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๋ฌ๋ ๊ฐ์ ๋ฏธ๋ฆฌ ์ ์ฅํ ์ ์์ ๊ธฐ๋ณธ ๊ฐ์ ๊ฐ๋ ๋งค๊ฐ๋ณ์๋ ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก ์ค ๋งจ ๋ค์ ์์นํ๋ ๊ฒ์ด ์ข์ 2. ์ ๋ฌ์ธ์ ๋ ์ด๋ธ // ๋ด๋ถ์์๋ ๋งค๊ฐ๋ณ์ ์ด๋ฆ func greeting(to friend : String, from me : String) { print("Hello, \(friend)!, my name is \(me)") } // ํธ์ถํ ๋๋ ์ ๋ฌ์ธ์ ๋ ์ด๋ธ greeting(to : "doko", from : "kodo") ..
๐ป ๊ฐ๋ฐ/์ค๋์ ์ฝ์ง
TableView๋ฅผ ์ฌ์ฉํ๋ฉด์ Cell์ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด extension์ผ๋ก UITableViewDataSource๋ฅผ ์ฌ์ ์ํ๊ณ ๋น๋๋ฅผ ์งํํ๋ค. extension ViewController : UITableViewDataSource { func tableView(_ tableView : UITableView, numberOfRowsInSection section : Int) -> Int { return self.tasks.count } func tableView(_ tableView : UITableView, cellForRowAt indexPath : IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdenti..
๐ป ๊ฐ๋ฐ/์ค๋์ ์ฝ์ง
์ธํด ๊ธฐ๊ฐ ๋์ ๊ฐ๋ฐํ ์ฑ์ ๋ฐฐํฌํ๋ ค๊ณ ์ฑ ์์ด์ฝ ์ด๋ฏธ์ง๋ฅผ ์ฒจ๋ถํ๊ณ Gradle์์ debug -> release ๋ก ๋ณ๊ฒฝํ๊ณ Build Apk ๋ฅผ ๋๋ ๋๋ฐ! ์๋์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ด๋ค. mockup1/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature. ์์นญ์ ํด๋ณด๋๊น Gradle ๋ฒ์ ผ์ด ๋ง์ง ์๋๋ค. ๋ค๋ฅธ ๋ฌธ์ ๋ค~ ์ด๋ฐ ๊ธ๋ค์ด ๋ง์๋ฐ ๋ญ๊ฐ ์ด์ํ๋ค. ์ง๊ธ ์ฌ์ฉํ๊ณ ์๋ ๋ฒ์ ผ์ด 7์ธ๋ฐ 4๊น์ง ๋ฎ์ถฐ์ผํ๋ค๊ณ ? ๊ดํ ๊ฑด๋๋ ธ๋ค๊ฐ ๋ค๋ฅธ ์ค๋ฅ๋ก ํฐ๋ฏธ๋์ด ํฐ์ง ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ ์ฒจ๋ถํ ์ฑ ์์ด์ฝ ์ด๋ฏธ์ง๋ฅผ ์ดํด๋ดค๋ค. ํ์ผ๋ช
์ ic..