02‐Kia - molab-itp/content-2026-itp GitHub Wiki
Week 01
Part 1 — Swift fundamentals
Resource: Swift Playgrounds (Mac App Store) — "Get Started with Code". Completed: Commands, For Loops, Conditional Code, Logical Operators, Variables, Types, Initialization, Functions, Parameters.
Hours: 6
What worked: the puzzle format made control flow click fast. Loops, conditionals, functions and parameters all felt natural coming from JavaScript.
What was missing: "Get Started with Code" teaches logic through the Byte
robot, but never covers three things this assignment needs — print(),
string indexing, and random numbers. The game gives feedback by moving a
character, so the console never appears. I filled those gaps with the course's
own 01-Javascript-to-Swift playground.
Part 2 — Text art playground
Week01 playground — generates a 19×19 random block pattern.
Issue 1 — unused loop variable
for i in 1...5 { print("🟥🟩🟨") }
// warning: immutable value 'i' was never used
Fixed with for _ in. Swift wants you to say explicitly that you don't need
the counter.
Issue 2 — cannot index a String with an integer
print(str[2]) // does not compile
Swift strings are accessed through String.Index:
let idx = str.index(str.startIndex, offsetBy: 2)
let char = str[idx]
Issue 3 — cannot append a Character to a String
line += char
// error: cannot convert value of type 'Character' to expected
// argument type 'String'
str[idx] returns a Character, but += on String only takes a String.
Two fixes: line += String(char), or line.append(char) which takes a
Character directly. I used the first — same as the course's charAt example.
AI use
Used Claude to explain Swift language mechanics (String.Index, type conversion) and to break the assignment into smaller steps. All assignment code was typed by hand; the AI was not asked to produce it.
Week 02
Part 1 — Swift fundamentals
Resource: Swift Playgrounds (Mac App Store) — "Get Started with Apps" (Learn the Basics of Apps, Swift 5.8 Edition). Completed.
Hours: 6 hours
Part 2 — ASCII playground
Week02 playground — prints my personal logo as ASCII art.
The logo comes from my portfolio site, kiabai.me.
The playground follows animals ascii from 02-Ascii-Play: load() pulls the
text out of the playground bundle, split(separator: "\n") turns it into an
array of lines, and a for loop prints them.
Week 03
Part 1 — Swift fundamentals + SwiftUI
Hours: 6 hours
Part 2 — Random SwiftUI app
Week03 project — two tabs, each a Canvas grid of random emoji:
- Hearts: random-colour heart emoji
- Mahjong: random mahjong tiles
Week 04
PGONE (audio app)
Week04 project — a SwiftUI version of my p5.js sketch. Five stems of one song (bass, drums, guitar, violin, vocal) loop together.
- Stage: drag the 🎶 circle around; each track gets louder and its circle grows the closer you are to it
- Mixer: one slider per track
Week 05
PGONE + Album tab
Week05 project — builds on Week 04's PGONE, now with a new song (bass, drums, metronome, other, vocals) and a third tab.
- Album: paste an image url and tap Show;
AsyncImageloads the cover. The shown url is saved with@AppStorage(from 05-AppStorageDemo), so the cover is still there after the app is closed.
Final project idea — menu photo lookup
When a menu is in a language you can't read, a translation alone still doesn't show what the dish looks like. The idea: take a photo of a menu in another language, and the app
- reads the text on the menu (camera + text recognition)
- translates each dish name
- finds pictures of each dish and shows them next to the translation
Why a phone: the camera is already in your hand at the table, and it has to work in the moment, while ordering.
Week 06
DishPeek AI — first version of my final project
-
Progress: a menu list: Korean name, English translation, and a picture loaded from a url. Add, edit and delete a dish. Remixed from 06-ImageEditDemoJSON, so every change is saved to
dishes.jsonand the list is still there after the app is closed. -
Problems: the demo's
String(contentsOfFile:)gave a deprecation warning in Xcode 27; addingencoding: .utf8fixed it. If every dish is deleted, the sample menu comes back on the next launch. -
Plans: Week 07: take or pick a photo of a real menu. Later: read the menu text (VisionKit Live Text), translate it (Translation framework), and find dish pictures automatically — the AI part.
-
Questions: what's a good source for dish pictures in the final app? Wikipedia works for well-known dishes but misses many.
Midterm checklist [] weekly description of homework progress/challenges in your wiki page [] added jht9629-nyu as collab on your repo [] uploaded at least one photo in MoGallery TestFlight App [] able to build and run example apps own iPhone [] installed Xcode 26 [] watched at least one WWDC video