{"id":2588,"date":"2026-02-02T12:13:31","date_gmt":"2026-02-02T12:13:31","guid":{"rendered":"https:\/\/demo.materiamedica.net\/demo6\/?p=2588"},"modified":"2026-02-02T12:13:31","modified_gmt":"2026-02-02T12:13:31","slug":"chapter-4-swift-statements","status":"publish","type":"post","link":"https:\/\/demo.materiamedica.net\/demo6\/chapter-4-swift-statements\/","title":{"rendered":"Chapter 4: Swift Statements"},"content":{"rendered":"<h3 dir=\"auto\">1. What is a \u201cstatement\u201d in Swift?<\/h3>\n<p dir=\"auto\">A <strong>statement<\/strong> is any complete instruction that Swift can execute. It usually ends with a semicolon ; \u2014 <strong>but in Swift you almost never need to write ; at the end<\/strong> (only when you put multiple statements on one line).<\/p>\n<p dir=\"auto\">Examples of statements:<\/p>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>Swift<\/div>\n<div>\n<pre tabindex=\"0\"><code>print(\"Hello\")                    \/\/ expression statement\r\nlet name = \"Priya\"                \/\/ declaration statement\r\nreturn 42                         \/\/ control statement\r\nbreak                             \/\/ control statement<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 dir=\"auto\">2. Most Common Category: Simple Expression Statements<\/h3>\n<p dir=\"auto\">These are the statements you write most often \u2014 they evaluate an expression and (usually) do something with the result.<\/p>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>Swift<\/div>\n<div>\n<pre tabindex=\"0\"><code>\/\/ Most common\r\nprint(\"Namaste!\")                           \/\/ calls function\r\nscore += 10                                 \/\/ assignment + arithmetic\r\nnames.append(\"Aarav\")                       \/\/ method call\r\nisRaining = false                           \/\/ assignment\r\ntemperature -= 2.5                          \/\/ compound assignment\r\nuser?.updateProfile()                       \/\/ optional chaining<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\"><strong>Important note<\/strong>: Even a function call that returns something is a valid statement \u2014 you can ignore the return value.<\/p>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>Swift<\/div>\n<div>\n<pre tabindex=\"0\"><code>_ = loadUserData()      \/\/ I call it but I don't use the result<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 dir=\"auto\">3. Declaration Statements (let, var, func, struct, enum, class\u2026)<\/h3>\n<p dir=\"auto\">These introduce new names into your code.<\/p>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>Swift<\/div>\n<div>\n<pre tabindex=\"0\"><code>\/\/ Variables and constants\r\nlet maximumUsers = 100\r\nvar currentUsers = 0\r\n\r\n\/\/ Computed property inside struct\/class\r\nvar fullName: String {\r\n    return firstName + \" \" + lastName\r\n}\r\n\r\n\/\/ Typealias\r\ntypealias UserID = Int64\r\n\r\n\/\/ Function declaration\r\nfunc calculateTax(income: Double) -&gt; Double {\r\n    return income * 0.18\r\n}\r\n\r\n\/\/ Structure \/ Class \/ Enum\r\nstruct Point {\r\n    var x: Double\r\n    var y: Double\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 dir=\"auto\">4. Control Flow Statements \u2013 if, guard, switch<\/h3>\n<p dir=\"auto\">These decide which code runs.<\/p>\n<h4 dir=\"auto\">4.1 if \u2013 else if \u2013 else<\/h4>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>Swift<\/div>\n<div>\n<pre tabindex=\"0\"><code>let temperature = 34\r\n\r\nif temperature &gt; 38 {\r\n    print(\"Heatwave warning!\")\r\n} else if temperature &gt; 32 {\r\n    print(\"Very hot day\")\r\n} else if temperature &gt; 25 {\r\n    print(\"Typical summer\")\r\n} else {\r\n    print(\"Quite pleasant\")\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\"><strong>One-line if (sometimes used):<\/strong><\/p>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>Swift<\/div>\n<div>\n<pre tabindex=\"0\"><code>if isLoggedIn { showDashboard() }<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h4 dir=\"auto\">4.2 guard \u2013 very popular in Swift<\/h4>\n<p dir=\"auto\">guard is used for <strong>early exit<\/strong> \u2014 it makes code much easier to read.<\/p>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>Swift<\/div>\n<div>\n<pre tabindex=\"0\"><code>func processOrder(items: [String]?, address: String?) {\r\n    guard let items else {\r\n        print(\"No items selected\")\r\n        return\r\n    }\r\n    \r\n    guard !items.isEmpty else {\r\n        print(\"Cart is empty\")\r\n        return\r\n    }\r\n    \r\n    guard let address, !address.isEmpty else {\r\n        print(\"Delivery address required\")\r\n        return\r\n    }\r\n    \r\n    print(\"Order is valid \u2014 proceeding to payment\")\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\"><strong>Key difference<\/strong>:<\/p>\n<ul dir=\"auto\">\n<li>if let = keep going deeper (nested)<\/li>\n<li>guard let = exit early \u2192 flatter, cleaner code<\/li>\n<\/ul>\n<h4 dir=\"auto\">4.3 switch \u2013 very powerful in Swift<\/h4>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>Swift<\/div>\n<div>\n<pre tabindex=\"0\"><code>let grade = \"A+\"\r\n\r\nswitch grade {\r\ncase \"A\", \"A+\":\r\n    print(\"Excellent!\")\r\ncase \"B\", \"B+\":\r\n    print(\"Good\")\r\ncase \"C\":\r\n    print(\"Average\")\r\ncase \"D\", \"F\":\r\n    print(\"Needs improvement\")\r\ndefault:\r\n    print(\"Invalid grade\")\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\"><strong>Advanced switch examples you see often:<\/strong><\/p>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>Swift<\/div>\n<div>\n<pre tabindex=\"0\"><code>\/\/ Ranges\r\nlet statusCode = 404\r\n\r\nswitch statusCode {\r\ncase 200..&lt;300:\r\n    print(\"Success\")\r\ncase 400..&lt;500:\r\n    print(\"Client error\")\r\ncase 500...:\r\n    print(\"Server error\")\r\ndefault:\r\n    print(\"Unknown\")\r\n}\r\n\r\n\/\/ Matching enums (very common)\r\nenum Direction {\r\n    case north, south, east, west\r\n}\r\n\r\nlet heading = Direction.north\r\n\r\nswitch heading {\r\ncase .north: print(\"\u2191\")\r\ncase .south: print(\"\u2193\")\r\ncase .east:  print(\"\u2192\")\r\ncase .west:  print(\"\u2190\")\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 dir=\"auto\">5. Loop Statements<\/h3>\n<h4 dir=\"auto\">5.1 for-in loop (most common)<\/h4>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>Swift<\/div>\n<div>\n<pre tabindex=\"0\"><code>let cities = [\"Hyderabad\", \"Bengaluru\", \"Chennai\", \"Pune\"]\r\n\r\nfor city in cities {\r\n    print(\"I love \\(city)!\")\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">With index:<\/p>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>Swift<\/div>\n<div>\n<pre tabindex=\"0\"><code>for (index, city) in cities.enumerated() {\r\n    print(\"\\(index + 1). \\(city)\")\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h4 dir=\"auto\">5.2 for with range<\/h4>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>Swift<\/div>\n<div>\n<pre tabindex=\"0\"><code>for number in 1...5 {\r\n    print(number)       \/\/ 1 2 3 4 5\r\n}\r\n\r\nfor i in 0..&lt;10 {\r\n    print(i)            \/\/ 0 to 9\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h4 dir=\"auto\">5.3 while &amp; repeat-while<\/h4>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>Swift<\/div>\n<div>\n<pre tabindex=\"0\"><code>var count = 0\r\n\r\nwhile count &lt; 5 {\r\n    print(\"Count is \\(count)\")\r\n    count += 1\r\n}\r\n\r\nvar diceRoll: Int\r\n\r\nrepeat {\r\n    diceRoll = Int.random(in: 1...6)\r\n    print(\"Rolled: \\(diceRoll)\")\r\n} while diceRoll != 6<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 dir=\"auto\">6. Transfer Statements \u2013 control flow jumps<\/h3>\n<p dir=\"auto\">These change the normal flow.<\/p>\n<div>\n<div dir=\"auto\">\n<table dir=\"auto\">\n<thead>\n<tr>\n<th data-col-size=\"sm\">Statement<\/th>\n<th data-col-size=\"xl\">What it does<\/th>\n<th data-col-size=\"lg\">Where you use it most<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td data-col-size=\"sm\">break<\/td>\n<td data-col-size=\"xl\">Exit the nearest loop \/ switch<\/td>\n<td data-col-size=\"lg\">Loops, switch<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"sm\">continue<\/td>\n<td data-col-size=\"xl\">Skip to next iteration of loop<\/td>\n<td data-col-size=\"lg\">Loops<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"sm\">fallthrough<\/td>\n<td data-col-size=\"xl\">Continue to next case in switch<\/td>\n<td data-col-size=\"lg\">Rare, intentional<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"sm\">return<\/td>\n<td data-col-size=\"xl\">Exit function \/ closure<\/td>\n<td data-col-size=\"lg\">Functions<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"sm\">throw<\/td>\n<td data-col-size=\"xl\">Throw an error<\/td>\n<td data-col-size=\"lg\">Throwing functions<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Examples:<\/p>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>Swift<\/div>\n<div>\n<pre tabindex=\"0\"><code>for number in 1...10 {\r\n    if number == 7 { continue }     \/\/ skip 7\r\n    if number == 9 { break }        \/\/ stop at 9\r\n    print(number)\r\n}\r\n\r\n\/\/ fallthrough (rare but useful sometimes)\r\nlet value = 2\r\n\r\nswitch value {\r\ncase 1:\r\n    print(\"One\")\r\n    fallthrough\r\ncase 2:\r\n    print(\"Two\")\r\ndefault:\r\n    print(\"Other\")\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 dir=\"auto\">7. do \u2013 catch (Error Handling Statements)<\/h3>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>Swift<\/div>\n<div>\n<pre tabindex=\"0\"><code>enum NetworkError: Error {\r\n    case timeout\r\n    case invalidURL\r\n}\r\n\r\nfunc fetchData() throws {\r\n    throw NetworkError.timeout\r\n}\r\n\r\ndo {\r\n    try fetchData()\r\n    print(\"Success\")\r\n} catch NetworkError.timeout {\r\n    print(\"Request timed out\")\r\n} catch {\r\n    print(\"Unknown error: \\(error)\")\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Modern short version:<\/p>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>Swift<\/div>\n<div>\n<pre tabindex=\"0\"><code>if let data = try? fetchData() {\r\n    \/\/ success\r\n} else {\r\n    \/\/ failed\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 dir=\"auto\">Quick Reference Table \u2013 Most Important Statements<\/h3>\n<div>\n<div dir=\"auto\">\n<table dir=\"auto\">\n<thead>\n<tr>\n<th data-col-size=\"xs\">Kind<\/th>\n<th data-col-size=\"lg\">Statement Example<\/th>\n<th data-col-size=\"lg\">Most Common Use Case<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td data-col-size=\"xs\">Expression<\/td>\n<td data-col-size=\"lg\">print(&#8220;Hi&#8221;)<\/td>\n<td data-col-size=\"lg\">Doing work, calling functions<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"xs\">Declaration<\/td>\n<td data-col-size=\"lg\">let name = &#8220;Amit&#8221;<\/td>\n<td data-col-size=\"lg\">Creating variables, functions, types<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"xs\">if<\/td>\n<td data-col-size=\"lg\">if age &gt;= 18 { &#8230; }<\/td>\n<td data-col-size=\"lg\">Simple conditions<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"xs\">guard<\/td>\n<td data-col-size=\"lg\">guard let name else { return }<\/td>\n<td data-col-size=\"lg\">Early exit \/ input validation<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"xs\">switch<\/td>\n<td data-col-size=\"lg\">switch status { case 200..&lt;300: &#8230; }<\/td>\n<td data-col-size=\"lg\">Multiple conditions, enums, ranges<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"xs\">for-in<\/td>\n<td data-col-size=\"lg\">for item in array { &#8230; }<\/td>\n<td data-col-size=\"lg\">Iterating collections<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"xs\">while \/ repeat-while<\/td>\n<td data-col-size=\"lg\">while condition { &#8230; }<\/td>\n<td data-col-size=\"lg\">Unknown number of iterations<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"xs\">return<\/td>\n<td data-col-size=\"lg\">return result<\/td>\n<td data-col-size=\"lg\">Exit function with value<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"xs\">break \/ continue<\/td>\n<td data-col-size=\"lg\">if condition { break }<\/td>\n<td data-col-size=\"lg\">Early exit from loop<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"xs\">do-catch<\/td>\n<td data-col-size=\"lg\">do { try &#8230; } catch { &#8230; }<\/td>\n<td data-col-size=\"lg\">Handling errors<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div><\/div>\n<\/div>\n<\/div>\n<h3 dir=\"auto\">Small Practice \u2013 Combine several statements<\/h3>\n<p dir=\"auto\">Try writing this in a playground:<\/p>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>Swift<\/div>\n<div>\n<pre tabindex=\"0\"><code>let temperatures = [28, 34, 41, 19, 25]\r\n\r\nfor (index, temp) in temperatures.enumerated() {\r\n    print(\"\\(index + 1). Today's temperature: \\(temp)\u00b0C\")\r\n    \r\n    guard temp &lt;= 40 else {\r\n        print(\"   \u2192 Heat alert! Stay hydrated!\")\r\n        continue\r\n    }\r\n    \r\n    switch temp {\r\n    case ..&lt;20:\r\n        print(\"   \u2192 It's chilly \u2014 wear a jacket\")\r\n    case 20..&lt;30:\r\n        print(\"   \u2192 Nice weather\")\r\n    case 30...:\r\n        print(\"   \u2192 Hot day\")\r\n    default:\r\n        break\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Next topic you want to explore deeply?<\/p>\n<ul dir=\"auto\">\n<li><strong>More about switch<\/strong> (pattern matching, associated values)<\/li>\n<li><strong>Closures<\/strong> (very important statement style)<\/li>\n<li><strong>defer<\/strong> statement (cleanup code)<\/li>\n<li><strong>throwing functions &amp; do-try-catch<\/strong> in more detail<\/li>\n<li><strong>async\/await<\/strong> statements (modern concurrency)<\/li>\n<\/ul>\n<p dir=\"auto\">Just tell me what you want next \u2014 we\u2019ll keep going in the same detailed way \ud83d\ude0a<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. What is a \u201cstatement\u201d in Swift? A statement is any complete instruction that Swift can execute. It usually ends with a semicolon ; \u2014 but in Swift you almost never need to write&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[76],"tags":[],"class_list":["post-2588","post","type-post","status-publish","format-standard","hentry","category-swift"],"_links":{"self":[{"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/posts\/2588","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/comments?post=2588"}],"version-history":[{"count":1,"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/posts\/2588\/revisions"}],"predecessor-version":[{"id":2589,"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/posts\/2588\/revisions\/2589"}],"wp:attachment":[{"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/media?parent=2588"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/categories?post=2588"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/tags?post=2588"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}