blog.iankulin.com

blog.iankulin.com

Closures

While working through cs193p homework, I praise the Swift book’s clear, step-by-step explanation of closures, and by coincidence encounter the same topic twice more that day in a Fireside Swift podcast episode and an iOS Academy video. The post also notes that closures can be challenging without experience passing around function pointers or doing multithreaded programming, and that Swift’s ability to cut the syntax down to very little takes getting used to...

Xcode Tour

An embedded video in which I tour the basics of Xcode, presented as the first installment of my design-oriented course on SwiftUI...

Checkpoint 6

My short Swift exercise solution covers structs and access control: a Car struct stores a model, seat count, and current gear. The gear is protected with private(set) access and can only be changed through my mutating gearUp and gearDown methods that stay within static min and max gear constants...

Swift Over Coffee

I take a look at the Swift Over Coffee podcast, hosted by Paul Hudson and Erica Sadun, which covers Swift and iOS development news, weekly topics, and listener questions from Twitter. Despite running for only two seasons, in 2019 and 2020, it’s still worthwhile content for a beginning developer...

SF Symbols

I take a look at SF Symbols in SwiftUI, starting with how Image(systemName:) renders a symbol in code. I cover Apple’s SF Symbols app, which provides over 4000 symbols that work with the San Francisco font and can be scaled and coloured, and show how searching and previewing symbols there helps me pick ones that support a consistent, recognisable interface...

Passing Data

Impressions of a free compilation video from Sean Allen’s SwiftUI fundamentals course, which I find strong on explaining child views and layout stacks but note assumes existing Swift language knowledge. The later lessons on passing values into views speak to my own confusion about SwiftUI app structure and how views get redrawn, making the paid course tempting despite my already juggling several other learning resources...

App Development in Swift Playgrounds

I give an account of a Swift Playgrounds workshop for teachers, run by Matt Richards with support from Apple staff, which taught by having participants modify an existing app rather than starting from the basics. I relate that top-down approach to my own mix of structured courses (100 Days of SwiftUI, cs193p) and first-app building, noting it is engaging but that problems get complex quickly. I also touch on the value of having expert help on hand when self-teaching, and on borrowing ideas from the Playgrounds App Gallery’s example apps...

struct

My notes on day 10 of the 100 Days of SwiftUI course, which covers structs. Having worked in languages where structs are just data containers, I find their methods and properties initially confusing — including a now-resolved question about the purpose of tuples — and demonstrate with sample code how structs are copied as value types while classes are passed by reference. I also note that SwiftUI sample code is built entirely from structs...

Fireside Swift

A short recommendation of the Fireside Swift podcast, an informal iOS development show where the hosts discuss a Swift topic each week. I prefer the early two-host episodes for getting to the topic faster and find the discussions well suited to listeners who already know other languages...

Checkpoint 5

My Swift solution to an array-processing exercise: filtering even numbers out of an array of lucky numbers, sorting the remaining values in ascending order, mapping each one to a formatted string, and printing the results one per line using filter, sorted, and map...

Create an Empty Folder on GitHub

GitHub’s web interface has no way to create an empty folder directly, but adding a file with a slash in its path (such as new-folder/README.md) creates the folder automatically, after which files can be dragged in as normal. The tip comes from a Zack West article on Alpharithms, which I link for a fuller explanation with pictures...

Minimum Functionality for App Store

A follow-up on EasterDay, my first iOS app, in which I worry it may be rejected under the App Store’s Minimum Functionality guideline for being too trivial. I intend to finish building it anyway for the learning experience, though I might not submit it, and note that my other app ideas are currently beyond my expertise...

awesome-ios list on GitHub

While looking for Swift fundamentals podcasts, I came across the community-maintained awesome-ios list on GitHub. It includes several podcasts I hadn’t encountered before, which I plan to check out...

Learning Retention

I rewrote a Swift checkpoint exercise after the original unsaved code was lost, with the task being to count the unique elements in an array of strings. The solution casts the array to a Set, and I reflect on having encountered sets twice recently, in the 100 days course and a podcast episode, calling that kind of spaced exposure high-quality learning...

Checkpoint 4

My Swift solution to a coding challenge: compute the integer square root of a number between 1 and 10,000 without using the built-in sqrt() function. My implementation uses a brute-force loop and throws custom errors for out-of-bounds input or when no integer root exists, with do/catch error handling shown in the example usage...

Checkpoint 4 optimisation

A walkthrough of the Hacking with Swift Checkpoint 4 exercise, computing integer square roots in Swift. I first solve it with a brute-force loop, then show a binary search version that handles far larger input ranges with no perceptible delay, and reflect on the trade-offs between code simplicity and performance...

Gitting Started

I set up Git and GitHub for the first time by following a video tutorial, working on a Mac. I cover the basic workflow of cloning, staging, committing, and pushing, along with minor troubleshooting around the default branch name, unset git config, and a first encounter with Vim. Generating an SSH key was the only real complexity...

Tuple Pronunciation

A short follow-up in which I note an unexpected benefit of watching CS193P lecture videos: learning how terms are actually pronounced. I had always said “tuple” to rhyme with “cup,” but the videos revealed the correct pronunciation is “too-pull.”..

Learn to Code 1 - Finished

My milestone update marks the completion of the Learn to Code 1 Playgrounds book, with a look at what comes next: Learn to Code 2 and other bundled books like Get Started with Apps. I also cover the More Playgrounds section, a mini app store of sorts offering small complete apps and feature-focused extensions such as Organizing with Grids...

Instant Errors

A short reflection on how Xcode and Playgrounds flag errors continuously as you type, rather than only at compile time. I contrast this with the long builds of earlier tools like Clipper and Visual C++, and describe moving from finding the live error feedback unnerving to enjoying it...