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 הזה חינמי?
איך פורקים 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 כברירת מחדל ולהשתמש במחלקה כשצריך מצב משותף שניתן לשינוי או ירושה.