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; AsyncImage loads 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

  1. reads the text on the menu (camera + text recognition)
  2. translates each dish name
  3. 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

Week06 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.json and the list is still there after the app is closed.

  • Problems: the demo's String(contentsOfFile:) gave a deprecation warning in Xcode 27; adding encoding: .utf8 fixed 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