{"id":18839754,"url":"https://github.com/maximbilan/swifthandbook","last_synced_at":"2025-07-28T22:36:07.679Z","repository":{"id":214200611,"uuid":"735945705","full_name":"maximbilan/SwiftHandbook","owner":"maximbilan","description":"Explore essential Swift nuggets in our \"Swift Handbook\" repository. Tailored for both beginners or pros.","archived":false,"fork":false,"pushed_at":"2024-01-10T09:43:45.000Z","size":213,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-30T09:26:21.887Z","etag":null,"topics":["handbook","swift","tips","tips-and-tricks","tips-tricks"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maximbilan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-26T14:34:30.000Z","updated_at":"2024-04-02T05:42:56.000Z","dependencies_parsed_at":"2023-12-26T16:55:33.723Z","dependency_job_id":"d8518abb-f0ce-4e65-9697-a1c3eed0d3c6","html_url":"https://github.com/maximbilan/SwiftHandbook","commit_stats":null,"previous_names":["maximbilan/swifttips"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximbilan%2FSwiftHandbook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximbilan%2FSwiftHandbook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximbilan%2FSwiftHandbook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximbilan%2FSwiftHandbook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maximbilan","download_url":"https://codeload.github.com/maximbilan/SwiftHandbook/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239774310,"owners_count":19694701,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["handbook","swift","tips","tips-and-tricks","tips-tricks"],"created_at":"2024-11-08T02:43:58.628Z","updated_at":"2025-02-20T04:21:10.771Z","avatar_url":"https://github.com/maximbilan.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Swift Handbook\nWelcome to \"Swift Handbook,\" where we peel back the layers of Swift, revealing the nifty tricks and under-the-hood magic that make this language a modern marvel. Our repository is your go-to treasure trove for bite-sized wisdom, dishing out savvy programming insights. Whether you're a seasoned coder or just starting, our tips cater to all, making complex concepts digestible and fun.\n\n# Tips\n\n[1. defer](/tips/001_defer/script.md)\u003cbr\u003e\n[2. Unavailable macro](/tips/002_unavailable/script.md)\u003cbr\u003e\n[3. Semicolons](/tips/003_semicolons/script.md)\u003cbr\u003e\n[4. if case let](/tips/004_if_case_let/script.md)\u003cbr\u003e\n[5. Typealiases](/tips/005_typealiases_for_functions/script.md)\u003cbr\u003e\n[6. @discardableResult](/tips/006_@discardableResult/script.md)\u003cbr\u003e\n[7. CaseIterable](/tips/007_caseIterable/script.md)\u003cbr\u003e\n[8. CustomStringConvertible protocol](/tips/008_customStringConvertible/script.md)\u003cbr\u003e\n[9. zip](/tips/009_zip/script.md)\u003cbr\u003e\n[10. reduce](/tips/010_reduce/script.md)\u003cbr\u003e\n[11. deinit](/tips/011_deinit/script.md)\u003cbr\u003e\n[12. Lazy](/tips/012_lazy/script.md)\u003cbr\u003e\n[13. Lazy Threads](/tips/013_lazy_threads/script.md)\u003cbr\u003e\n[14. inout](/tips/014_inout/script.md)\u003cbr\u003e\n[15. autoclosure](/tips/015_autoclosure/script.md)\u003cbr\u003e\n[16. where for loop](/tips/016_where_for_loop/script.md)\u003cbr\u003e\n[17. Variadic Arguments](/tips/017_variadic_arguments/script.md)\u003cbr\u003e\n[18. @dynamicCallable](/tips/018_@dynamicCallable/script.md)\u003cbr\u003e\n[19. Opaque Types](/tips/019_opaque_types/script.md)\u003cbr\u003e\n[20. Dump](/tips/020_dump/script.md)\u003cbr\u003e\n[21. Result](/tips/021_result/script.md)\u003cbr\u003e\n[22. Large number separators](/tips/022_large_number_separators/script.md)\u003cbr\u003e\n[23. Actor](/tips/023_actor/script.md)\u003cbr\u003e\n[24. @nonobjc](/tips/024_@nonobjc/script.md)\u003cbr\u003e\n[25. @propertyWrapper](/tips/025_@propertyWrapper/script.md)\u003cbr\u003e\n[26. mutating](/tips/026_mutating/script.md)\u003cbr\u003e\n[27. fallthrough](/tips/027_fallthrough/script.md)\u003cbr\u003e\n[28. Tuples](/tips/028_tuples/script.md)\u003cbr\u003e\n[29. @dynamicMemberLookup](/tips/029_@dynamicMemberLookup/script.md)\u003cbr\u003e\n[30. @inlinable](/tips/030_@inlinable/script.md)\u003cbr\u003e\n[31. @autoreleasepool](/tips/031_@autoreleasepool/script.md)\u003cbr\u003e\n[32. guard](/tips/032_guard/script.md)\u003cbr\u003e\n[33. targetEnvironment](/tips/033_targetEnvironment/script.md)\u003cbr\u003e\n[34. Optionals](/tips/034_optionals/script.md)\u003cbr\u003e\n[35. Closures](/tips/035_closures/script.md)\u003cbr\u003e\n[36. @atomic](/tips/036_@atomic/script.md)\u003cbr\u003e\n[37. SOLID Single responsibility principle](/tips/037_solid_srp/script.md)\u003cbr\u003e\n[38. SOLID Open–closed principle](/tips/038_solid_ocp/script.md)\u003cbr\u003e\n[39. SOLID Liskov substitution principle](/tips/039_solid_lsp/script.md)\u003cbr\u003e\n[40. SOLID Interface segregation principle](/tips/040_solid_isp/script.md)\u003cbr\u003e\n[41. SOLID Dependency inversion principle](/tips/041_solid_dip/script.md)\u003cbr\u003e\n[42. Task](/tips/042_task/script.md)\u003cbr\u003e\n[43. Detached Task](/tips/043_task_detached/script.md)\u003cbr\u003e\n[44. compactMap](/tips/044_compactMap/script.md)\u003cbr\u003e\n[45. GeometryReader](/tips/045_GeometryReader/script.md)\u003cbr\u003e\n[46. Safe Array Extension](/tips/046_safe_array_extension/script.md)\u003cbr\u003e\n[47. Property observers](/tips/047_property_observers/script.md)\u003cbr\u003e\n[48. Codable](/tips/048_codable/script.md)\u003cbr\u003e\n[49. Equatable](/tips/049_equatable/script.md)\u003cbr\u003e\n[50. Optional Protocol](/tips/050_protocol_optional/script.md)\u003cbr\u003e\n[51. @Environment](/tips/051_@Environment/script.md)\u003cbr\u003e\n[52. @EnvironmentObject](/tips/052_@EnvironmentObject/script.md)\u003cbr\u003e\n[53. App Start](/tips/053_app_start/script.md)\u003cbr\u003e\n[54. Type Metadata](/tips/054_type_metadata/script.md)\u003cbr\u003e\n[55. Final](/tips/055_final/script.md)\u003cbr\u003e\n[56. Main Thread check](/tips/056_is_main_thread/script.md)\u003cbr\u003e\n[57. Optional chaining](/tips/057_optional_chaining/script.md)\u003cbr\u003e\n[58. PassthroughSubject](/tips/058_PassthroughSubject/script.md)\u003cbr\u003e\n[59. CurrentValueSubject](/tips/059_CurrentValueSubject/script.md)\u003cbr\u003e\n[60. Intersection](/tips/060_intersection/script.md)\u003cbr\u003e\n[61. Union](/tips/061_union/script.md)\u003cbr\u003e\n[62. Subtract](/tips/062_subtract/script.md)\u003cbr\u003e\n[63. Symmetric Difference](/tips/063_symmetric_difference/script.md)\u003cbr\u003e\n[64. foreach](/tips/064_foreach/script.md)\u003cbr\u003e\n[65. AsyncSequence](/tips/065_async_sequence/script.md)\u003cbr\u003e\n[66. @objc members](/tips/066_objc_members/script.md)\u003cbr\u003e\n[67. Recursion](/tips/067_recursion/script.md)\u003cbr\u003e\n[68. Polymorphism](/tips/068_polymorphism/script.md)\u003cbr\u003e\n[69. Inheritance](/tips/069_inheritance/script.md)\u003cbr\u003e\n[70. Composition](/tips/070_composition/script.md)\u003cbr\u003e\n[71. Delegation](/tips/071_delegation/script.md)\u003cbr\u003e\n[72. Abstraction](/tips/072_abstraction/script.md)\u003cbr\u003e\n[73. KISS](/tips/073_kiss/script.md)\u003cbr\u003e\n[74. Encapsulation](/tips/074_encapsulation/script.md)\u003cbr\u003e\n[75. Pure function](/tips/075_pure_function/script.md)\u003cbr\u003e\n[76. FetchRequest](/tips/076_fetch_request/script.md)\u003cbr\u003e\n[77. Random](/tips/077_random/script.md)\u003cbr\u003e\n[78. Private init](/tips/078_private_init/script.md)\u003cbr\u003e\n[79. Optional Initializer](/tips/079_optional_initializer/script.md)\u003cbr\u003e\n[80. Designated Initializer](/tips/080_designated_initializer/script.md)\u003cbr\u003e\n[81. Convenience Initializer](/tips/081_convenience_initializer/script.md)\u003cbr\u003e\n[82. How to check the Swift version at compile time](/tips/082_version/script.md)\u003cbr\u003e\n[83. How to convert between camel case and snake case](/tips/083_key_encoding_strategy/script.md)\u003cbr\u003e\n[84. How to make operations wait for another to complete](/tips/084_operation_dependency/script.md)\u003cbr\u003e\n[85. How to make a network request wait for an internet connection](/tips/085_waitsForConnectivity/script.md)\u003cbr\u003e\n[86. How to check whether a module is available](/tips/086_can_import/script.md)\u003cbr\u003e\n[87. How to convert a multidimensional array to a single-dimensional array](/tips/087_joined/script.md)\u003cbr\u003e\n[88. How to compare dates](/tips/088_dates/script.md)\u003cbr\u003e\n[89. Unowned Reference](/tips/089_unowned_reference/script.md)\u003cbr\u003e\n[90. What does Weak reference mean?](/tips/090_weak_reference/script.md)\u003cbr\u003e\n[91. What does Strong reference mean?](/tips/091_strong_reference/script.md)\u003cbr\u003e\n[92. Weak vs Unowned](/tips/092_weak_vs_unowned/script.md)\u003cbr\u003e\n[93. Automatic Reference Counting](/tips/093_arc/script.md)\u003cbr\u003e\n[94. Open vs Public](/tips/094_open_vs_public/script.md)\u003cbr\u003e\n[95. Swizzling](/tips/095_swizzling/script.md)\u003cbr\u003e\n[96. How to use Stack in Swift](/tips/096_stack/script.md)\u003cbr\u003e\n[97. How to implement a Queue in Swift](/tips/097_queue/script.md)\u003cbr\u003e\n[98. How to implement LinkedList in Swift](/tips/098_linkedlist/script.md)\u003cbr\u003e\n[99. Singleton in Swift](/tips/099_singleton/script.md)\u003cbr\u003e\n[100. Zombie in Swift](/tips/100_nszombie/script.md)\u003cbr\u003e\n[101. How to use try-catch in Swift](/tips/101_try_catch/script.md)\u003cbr\u003e\n[102. How to use Generics in Swift](/tips/102_generics/script.md)\u003cbr\u003e\n[103. Implementing Tree Data Structure in Swift](/tips/103_tree/script.md)\u003cbr\u003e\n[104. How to implement Graph in Swift](/tips/104_graph/script.md)\u003cbr\u003e\n[105. How to use Proxy pattern in Swift](/tips/105_proxy/script.md)\u003cbr\u003e\n[106. How to use Facade design pattern in Swift](/tips/106_facade/script.md)\u003cbr\u003e\n[107. How to use Adapter pattern in Swift](/tips/107_adapter/script.md)\u003cbr\u003e\n[108. How to use Decorator pattern in Swift](/tips/108_decorator/script.md)\u003cbr\u003e\n[109. Bit manipulation](/tips/109_bit_manipulation/script.md)\u003cbr\u003e\n[110. Binary tree](/tips/110_b_tree/script.md)\u003cbr\u003e\n[111. How to implement Observer pattern in Swift](/tips/111_observer/script.md)\u003cbr\u003e\n[112. How to shuffle an array in Swift](/tips/112_array_shuffle/script.md)\u003cbr\u003e\n[113. How to use associated type in Swift](/tips/113_associatedtype/script.md)\u003cbr\u003e\n[114. RunLoop for Precise Timing in Swift](/tips/114_runloop/script.md)\u003cbr\u003e\n[115. Subscriber method for receiving and handling data](/tips/115_sink/script.md)\u003cbr\u003e\n[116. How to use Sendable protocol in Swift](/tips/116_sendable/script.md)\u003cbr\u003e\n[117. How to use Builder pattern in Swift](/tips/117_builder/script.md)\u003cbr\u003e\n[118. How to use Prototype pattern in Swift](/tips/118_prototype/script.md)\u003cbr\u003e\n[119. Tracking Download Progress in URLSession](/tips/119_tracking_the_progress/script.md)\u003cbr\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaximbilan%2Fswifthandbook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaximbilan%2Fswifthandbook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaximbilan%2Fswifthandbook/lists"}