Swift Cheat Sheet: דף עזר מהיר
עודכן לאחרונה
Hello World ובסיס
Swift לא צריכה קוד תבנית ברמה העליונה: שורה אחת מספיקה כדי לרוץ.
| פעולה | תחביר |
|---|---|
| הדפסת שורה | print("Hello, World!") |
| הדפסה בלי ירידת שורה | print("Hi", terminator: "") |
| שילוב משתנים במחרוזת | print("Hi \(name)") |
| הערה | // this is a comment |
| הערה מרובת שורות | /* ... */ |
| ייבוא מודול | import Foundation |
| הרצת קובץ | swift run או swift main.swift |
משתנים (let / var) וטיפוסים
השתמשו ב-let לקבועים וב-var לערכים שמשתנים; הטיפוסים בדרך כלל מוסקים אוטומטית.
| פעולה | תחביר |
|---|---|
| קבוע | let age = 30 |
| משתנה | var count = 0 |
| טיפוס מפורש | let name: String = "Ada" |
| טיפוסים בסיסיים | Int, Double, String, Bool, Character |
| המרת טיפוס | Double(i), String(n), Int("42") |
| Tuple | let pair = (1, "a") |
| כינוי לטיפוס (typealias) | typealias ID = Int |
| בדיקת טיפוס | value is String, value as? String |
Optionals
Optionals מייצגים את האפשרות שערך חסר; פרקו אותם לפני השימוש.
| פעולה | תחביר |
|---|---|
| הגדרת optional | var name: String? = nil |
| Optional binding | if let n = name { ... } |
| פריקה עם guard | guard let n = name else { return } |
| Nil-coalescing | let n = name ?? "default" |
| Optional chaining | user?.address?.city |
| פריקה בכוח (לא בטוח) | name! |
| נפרק באופן מרומז | var name: String! |
| map על optional | name.map { $0.count } |
מחרוזות
מחרוזות הן טיפוסי ערך עם תמיכה מלאה ב-Unicode.
| פעולה | תחביר |
|---|---|
| אורך | s.count |
| אותיות גדולות / קטנות | s.uppercased(), s.lowercased() |
| שרשור | "foo" + "bar" |
| שילוב ערכים | "Total: \(price)" |
| מכילה | s.contains("ell") |
| מתחילה / מסתיימת ב | s.hasPrefix("he") |
| פיצול | s.split(separator: ",") |
| החלפה | s.replacingOccurrences(of: "a", with: "b") |
| מחרוזת מרובת שורות | """ ... """ |
אוספים (Array, Dictionary, Set)
שלושה טיפוסי אוסף מרכזיים, כולם טיפוסי ערך.
| פעולה | תחביר |
|---|---|
| ליטרל של מערך | var nums = [1, 2, 3] |
| הוספה לסוף | nums.append(4) |
| גישה / ספירה | nums[0], nums.count |
| Map / filter | nums.map { $0 * 2 }, nums.filter { $0 > 1 } |
| ליטרל של מילון | var ages = ["Ada": 30] |
| גישה למילון | ages["Ada"] מחזיר optional |
| ליטרל של Set | var ids: Set = [1, 2, 3] |
| הוספה ל-Set | ids.insert(4) |
| מעבר על מילון | for (k, v) in ages { ... } |
בקרת זרימה
תנאים לא צריכים סוגריים; switch חייב לכסות את כל המקרים.
| פעולה | תחביר |
|---|---|
| If / else | if x > 0 { ... } else { ... } |
| אופרטור טרנרי | let r = x > 0 ? "pos" : "neg" |
| Switch | switch n { case 1: ...; default: ... } |
| switch עם טווח | case 1...5: ... |
| לולאת for-in | for i in 0..<10 { ... } |
| for-in על מערך | for item in items { ... } |
| לולאת while | while x < 100 { ... } |
| Repeat-while | repeat { ... } while x < 100 |
| Break / continue | break, continue |
פונקציות ו-closures
לפונקציות יש פרמטרים עם תוויות; closures הם בלוקים עצמאיים של קוד.
| פעולה | תחביר |
|---|---|
| הגדרת פונקציה | func add(a: Int, b: Int) -> Int { a + b } |
| תווית חיצונית | func greet(to name: String) { ... } |
| פרמטר ברירת מחדל | func greet(name: String = "World") { ... } |
| פרמטר משתנה (variadic) | func sum(_ nums: Int...) -> Int { ... } |
| כמה ערכים מוחזרים (tuple) | func bounds() -> (min: Int, max: Int) { ... } |
| ביטוי closure | let f = { (x: Int) -> Int in x * x } |
| Trailing closure | nums.map { $0 * 2 } |
| ארגומנטים מקוצרים | { $0 + $1 } |
Structs לעומת מחלקות
Structs הם טיפוסי ערך (מועתקים); מחלקות הן טיפוסי הפניה (משותפות).
| פעולה | תחביר |
|---|---|
| הגדרת struct | struct Point { var x: Int; var y: Int } |
| הגדרת מחלקה | class Person { var name: String } |
| אתחול מחלקה (init) | init(name: String) { self.name = name } |
| יצירת מופע | let p = Point(x: 1, y: 2) |
| מתודת struct משנה (mutating) | mutating func move() { x += 1 } |
| מתודה של מחלקה | func greet() { ... } |
| ירושה (מחלקות בלבד) | class Student: Person { ... } |
| מאפיין מחושב | var area: Int { width * height } |
| חבר סטטי | static let shared = Manager() |
Enums
Enums מקבצים ערכים קשורים ויכולים לשאת נתונים משויכים.
| פעולה | תחביר |
|---|---|
| הגדרת enum | enum Direction { case north, south } |
| שימוש ב-case | let d = Direction.north |
| switch על enum | switch d { case .north: ... } |
| ערכים גולמיים (raw values) | enum Status: Int { case ok = 200 } |
| גישה לערך הגולמי | Status.ok.rawValue |
| אתחול מתוך ערך גולמי | Status(rawValue: 200) |
| ערכים משויכים | case result(Int, String) |
| מתודות על enums | func label() -> String { ... } |
התחביר של Swift שאתם צריכים הכי הרבה, בעמוד אחד. ה-Swift cheat sheet הזה הוא דף עזר מהיר לליבת השפה: קבועים ומשתנים, optionals, מחרוזות, אוספים, בקרת זרימה, פונקציות ו-closures, וגם ה-structs, המחלקות וה-enums שאיתם בונים אפליקציות ל-iOS ול-macOS.
כל מה שכאן הוא Swift סטנדרטי שמתקמפל עם ה-toolchain הרשמי. העתיקו את מה שאתם צריכים, או נסו כל קטע קוד בזמן אמת בעורך האונליין של Swift, בלי Xcode.
שאלות נפוצות על ה-Swift cheat sheet
האם ה-Swift cheat sheet הזה חינמי?
כן. ה-Swift cheat sheet הזה חינמי לגמרי, בלי צורך בהרשמה. שמרו אותו במועדפים וחזרו אליו בכל פעם שתצטרכו לבדוק תבנית של optional, תחביר של closure או מתודה של אוסף.
איך פורקים optional ב-Swift?
nil, ולכן פורקים אותו לפני השימוש. הדרכים הבטוחות הן optional binding (if let n = name { ... }), guard let בתחילת פונקציה, אופרטור ה-nil-coalescing (name ?? "default") ו-optional chaining (user?.name). פריקה בכוח עם name! עובדת, אבל גורמת לקריסה אם הערך הוא nil, אז השתמשו בה רק כשאתם בטוחים.מה ההבדל בין struct למחלקה ב-Swift?
struct הוא טיפוס ערך: השמה או העברה שלו יוצרת עותק, כך ששינויים לא משפיעים על המקור. class הוא טיפוס הפניה: עותקים חולקים את אותו מופע, ורק מחלקות תומכות בירושה. ההמלצה של Apple היא להעדיף structs כברירת מחדל ולהשתמש במחלקה כשצריך מצב משותף שניתן לשינוי או ירושה.אפשר לתרגל Swift אונליין?
כן. פתחו את עורך האונליין של Swift כדי להריץ כל קטע קוד מדף העזר הזה בדפדפן, בלי להתקין Xcode. כשתרצו מסגרת מסודרת, קורס ה-Swift האינטראקטיבי והחינמי של Coddy ייקח אתכם צעד אחר צעד מ-optionals ואוספים ועד structs, מחלקות ו-enums.
האם דף העזר הזה מתאים למתחילים?
כן. הוא מסודר מהנושאים הנפוצים ביותר (משתנים, optionals, בקרת זרימה) ועד המתקדמים (closures, structs לעומת מחלקות, enums), כך שאפשר להשתמש בחלקים העליונים כבר מהיום הראשון ולהתקדם לשאר בהמשך.