├── LICENSE ├── README.md └── SwiftTips.playground ├── Pages ├── 01 - Using map on optional values.xcplaygroundpage │ └── Contents.swift ├── 02 - Generating all cases for an Enum.xcplaygroundpage │ └── Contents.swift ├── 03 - Encapsulating state within a function.xcplaygroundpage │ └── Contents.swift ├── 04 - Typealiases for functions.xcplaygroundpage │ └── Contents.swift ├── 05 - Defining operators on function types.xcplaygroundpage │ └── Contents.swift ├── 06 - Storing functions rather than values.xcplaygroundpage │ └── Contents.swift ├── 07 - Implementing the builder pattern with keypaths.xcplaygroundpage │ └── Contents.swift ├── 08 - Achieving systematic validation of data.xcplaygroundpage │ └── Contents.swift ├── 09 - Implicit initialization from literal values.xcplaygroundpage │ └── Contents.swift ├── 10 - Observing new and old value with RxSwift.xcplaygroundpage │ └── Contents.swift ├── 11 - Using @autoclosure for cleaner call sites.xcplaygroundpage │ └── Contents.swift ├── 12 - Easily generating arrays of data.xcplaygroundpage │ └── Contents.swift ├── 13 - Simplifying complex conditions with pattern matching.xcplaygroundpage │ └── Contents.swift ├── 14 - Manufacturing cache-efficient versions of pure functions.xcplaygroundpage │ └── Contents.swift ├── 15 - Concise syntax for sorting using a KeyPath.xcplaygroundpage │ └── Contents.swift ├── 16 - Easier String slicing using ranges.xcplaygroundpage │ └── Contents.swift ├── 17 - Safely subscripting a Collection.xcplaygroundpage │ └── Contents.swift ├── 18 - Comparing Optionals through Conditional Conformance.xcplaygroundpage │ └── Contents.swift ├── 19 - Making good use of #file, #line and #function.xcplaygroundpage │ └── Contents.swift ├── 20 - Running two pieces of code in parallel.xcplaygroundpage │ └── Contents.swift ├── 21 - Measuring execution time with minimum boilerplate.xcplaygroundpage │ └── Contents.swift ├── 22 - Using parallelism to speed-up map().xcplaygroundpage │ └── Contents.swift ├── 23 - Dealing with expirable values.xcplaygroundpage │ └── Contents.swift ├── 24 - A shorter syntax to remove nil values.xcplaygroundpage │ └── Contents.swift ├── 25 - Defining a function to map over dictionaries.xcplaygroundpage │ └── Contents.swift ├── 26 - Retrieving all the necessary data to build a debug view.xcplaygroundpage │ └── Contents.swift ├── 27 - Encapsulating background computation and UI update.xcplaygroundpage │ └── Contents.swift ├── 28 - Shorter syntax to deal with optional strings.xcplaygroundpage │ └── Contents.swift ├── 29 - Removing duplicate values from a Sequence.xcplaygroundpage │ └── Contents.swift ├── 30 - Providing useful operators for Optional booleans.xcplaygroundpage │ └── Contents.swift ├── 31 - Debouncing a function call.xcplaygroundpage │ └── Contents.swift ├── 32 - Performing animations sequentially.xcplaygroundpage │ └── Contents.swift ├── 33 - Small footprint type-erasing with functions.xcplaygroundpage │ └── Contents.swift ├── 34 - Asserting that classes have associated NIBs and vice-versa.xcplaygroundpage │ └── Contents.swift ├── 35 - Defining a union type.xcplaygroundpage │ └── Contents.swift ├── 36 - Avoiding hardcoded reuse identifiers.xcplaygroundpage │ └── Contents.swift ├── 37 - Optimizing the use of `reduce()`.xcplaygroundpage │ └── Contents.swift ├── 38 - Writing an interruptible overload of `forEach`.xcplaygroundpage │ └── Contents.swift ├── 39 - Using `typealias` to its fullest.xcplaygroundpage │ └── Contents.swift ├── 40 - Lightweight data-binding for an MVVM implementation.xcplaygroundpage │ └── Contents.swift ├── 41 - Bringing some type-safety to a userInfo Dictionary.xcplaygroundpage │ └── Contents.swift ├── 42 - Using KeyPaths instead of closures.xcplaygroundpage │ └── Contents.swift ├── 43 - Transform an asynchronous function into a synchronous one.xcplaygroundpage │ └── Contents.swift ├── 44 - Solving callback hell with function composition.xcplaygroundpage │ └── Contents.swift ├── 45 - Getting rid of overabundant `[weak self]` and `guard`.xcplaygroundpage │ └── Contents.swift ├── 46 - Lightweight dependency injection through protocol-oriented programming.xcplaygroundpage │ └── Contents.swift ├── 47 - Another lightweight dependency injection through default values for function parameters.xcplaygroundpage │ └── Contents.swift ├── 48 - Providing a default value to a `Decodable` `enum`.xcplaygroundpage │ └── Contents.swift ├── 49 - Using `Never` to represent impossible code paths.xcplaygroundpage │ └── Contents.swift ├── 50 - Implementing a namespace through an empty `enum`.xcplaygroundpage │ └── Contents.swift ├── 51 - Defining a custom `init` without loosing the compiler-generated one.xcplaygroundpage │ └── Contents.swift ├── 52 - Avoiding double negatives within `guard` statements.xcplaygroundpage │ └── Contents.swift ├── 53 - Using `switch` and `if` as expressions.xcplaygroundpage │ └── Contents.swift ├── 54 - Composing `NSAttributedString` through a Function Builder.xcplaygroundpage │ └── Contents.swift ├── 55 - Implementing pseudo-inheritance between `structs`.xcplaygroundpage │ └── Contents.swift ├── 56 - Localization through `String` interpolation.xcplaygroundpage │ └── Contents.swift └── 57 - Property Wrappers as Debugging Tools.xcplaygroundpage │ └── Contents.swift └── contents.xcplayground /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/LICENSE -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/README.md -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/01 - Using map on optional values.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/01 - Using map on optional values.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/02 - Generating all cases for an Enum.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/02 - Generating all cases for an Enum.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/03 - Encapsulating state within a function.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/03 - Encapsulating state within a function.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/04 - Typealiases for functions.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/04 - Typealiases for functions.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/05 - Defining operators on function types.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/05 - Defining operators on function types.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/06 - Storing functions rather than values.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/06 - Storing functions rather than values.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/07 - Implementing the builder pattern with keypaths.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/07 - Implementing the builder pattern with keypaths.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/08 - Achieving systematic validation of data.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/08 - Achieving systematic validation of data.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/09 - Implicit initialization from literal values.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/09 - Implicit initialization from literal values.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/10 - Observing new and old value with RxSwift.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/10 - Observing new and old value with RxSwift.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/11 - Using @autoclosure for cleaner call sites.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/11 - Using @autoclosure for cleaner call sites.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/12 - Easily generating arrays of data.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/12 - Easily generating arrays of data.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/13 - Simplifying complex conditions with pattern matching.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/13 - Simplifying complex conditions with pattern matching.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/14 - Manufacturing cache-efficient versions of pure functions.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/14 - Manufacturing cache-efficient versions of pure functions.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/15 - Concise syntax for sorting using a KeyPath.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/15 - Concise syntax for sorting using a KeyPath.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/16 - Easier String slicing using ranges.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/16 - Easier String slicing using ranges.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/17 - Safely subscripting a Collection.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/17 - Safely subscripting a Collection.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/18 - Comparing Optionals through Conditional Conformance.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/18 - Comparing Optionals through Conditional Conformance.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/19 - Making good use of #file, #line and #function.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/19 - Making good use of #file, #line and #function.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/20 - Running two pieces of code in parallel.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/20 - Running two pieces of code in parallel.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/21 - Measuring execution time with minimum boilerplate.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/21 - Measuring execution time with minimum boilerplate.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/22 - Using parallelism to speed-up map().xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/22 - Using parallelism to speed-up map().xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/23 - Dealing with expirable values.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/23 - Dealing with expirable values.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/24 - A shorter syntax to remove nil values.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/24 - A shorter syntax to remove nil values.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/25 - Defining a function to map over dictionaries.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/25 - Defining a function to map over dictionaries.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/26 - Retrieving all the necessary data to build a debug view.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/26 - Retrieving all the necessary data to build a debug view.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/27 - Encapsulating background computation and UI update.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/27 - Encapsulating background computation and UI update.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/28 - Shorter syntax to deal with optional strings.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/28 - Shorter syntax to deal with optional strings.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/29 - Removing duplicate values from a Sequence.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/29 - Removing duplicate values from a Sequence.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/30 - Providing useful operators for Optional booleans.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/30 - Providing useful operators for Optional booleans.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/31 - Debouncing a function call.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/31 - Debouncing a function call.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/32 - Performing animations sequentially.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/32 - Performing animations sequentially.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/33 - Small footprint type-erasing with functions.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/33 - Small footprint type-erasing with functions.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/34 - Asserting that classes have associated NIBs and vice-versa.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/34 - Asserting that classes have associated NIBs and vice-versa.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/35 - Defining a union type.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/35 - Defining a union type.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/36 - Avoiding hardcoded reuse identifiers.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/36 - Avoiding hardcoded reuse identifiers.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/37 - Optimizing the use of `reduce()`.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/37 - Optimizing the use of `reduce()`.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/38 - Writing an interruptible overload of `forEach`.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/38 - Writing an interruptible overload of `forEach`.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/39 - Using `typealias` to its fullest.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/39 - Using `typealias` to its fullest.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/40 - Lightweight data-binding for an MVVM implementation.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/40 - Lightweight data-binding for an MVVM implementation.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/41 - Bringing some type-safety to a userInfo Dictionary.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/41 - Bringing some type-safety to a userInfo Dictionary.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/42 - Using KeyPaths instead of closures.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/42 - Using KeyPaths instead of closures.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/43 - Transform an asynchronous function into a synchronous one.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/43 - Transform an asynchronous function into a synchronous one.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/44 - Solving callback hell with function composition.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/44 - Solving callback hell with function composition.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/45 - Getting rid of overabundant `[weak self]` and `guard`.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/45 - Getting rid of overabundant `[weak self]` and `guard`.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/46 - Lightweight dependency injection through protocol-oriented programming.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/46 - Lightweight dependency injection through protocol-oriented programming.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/47 - Another lightweight dependency injection through default values for function parameters.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/47 - Another lightweight dependency injection through default values for function parameters.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/48 - Providing a default value to a `Decodable` `enum`.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/48 - Providing a default value to a `Decodable` `enum`.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/49 - Using `Never` to represent impossible code paths.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/49 - Using `Never` to represent impossible code paths.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/50 - Implementing a namespace through an empty `enum`.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/50 - Implementing a namespace through an empty `enum`.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/51 - Defining a custom `init` without loosing the compiler-generated one.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/51 - Defining a custom `init` without loosing the compiler-generated one.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/52 - Avoiding double negatives within `guard` statements.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/52 - Avoiding double negatives within `guard` statements.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/53 - Using `switch` and `if` as expressions.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/53 - Using `switch` and `if` as expressions.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/54 - Composing `NSAttributedString` through a Function Builder.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/54 - Composing `NSAttributedString` through a Function Builder.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/55 - Implementing pseudo-inheritance between `structs`.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/55 - Implementing pseudo-inheritance between `structs`.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/56 - Localization through `String` interpolation.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/56 - Localization through `String` interpolation.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/Pages/57 - Property Wrappers as Debugging Tools.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/Pages/57 - Property Wrappers as Debugging Tools.xcplaygroundpage/Contents.swift -------------------------------------------------------------------------------- /SwiftTips.playground/contents.xcplayground: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincent-pradeilles/swift-tips/HEAD/SwiftTips.playground/contents.xcplayground --------------------------------------------------------------------------------