<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ✨ thetealpickle 📱 </title>
    <description>The latest articles on DEV Community by ✨ thetealpickle 📱  (@thetealpickle).</description>
    <link>https://dev.to/thetealpickle</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F30155%2Fbbaca66f-c15f-48c8-9b57-67125f0031c9.jpg</url>
      <title>DEV Community: ✨ thetealpickle 📱 </title>
      <link>https://dev.to/thetealpickle</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thetealpickle"/>
    <language>en</language>
    <item>
      <title>Getting Schwifty with macros [TALK VIDEO]</title>
      <dc:creator>✨ thetealpickle 📱 </dc:creator>
      <pubDate>Wed, 17 Apr 2024 13:01:17 +0000</pubDate>
      <link>https://dev.to/thetealpickle/getting-schwifty-with-macros-talk-video-jl7</link>
      <guid>https://dev.to/thetealpickle/getting-schwifty-with-macros-talk-video-jl7</guid>
      <description>&lt;p&gt;Live coded a swift macro during the 2023 Geekle iOS Global developer conference. This is the presentation recording.&lt;/p&gt;

&lt;p&gt;In this talk, thetealpickle introduces macros and then live codes some macros 🤤 . A Rick and Morty themed multidimensionally used app, &lt;code&gt;Poopybutthole&lt;/code&gt;. From exploring and implementing various macros use cases to writing tests for our macros. We will also create custom diagnostics and fix-its to help the future maintainers of  &lt;code&gt;Poopybutthole&lt;/code&gt;. ✨ It’s time to get schwifty with macros, join the fun 🚀&lt;/p&gt;

&lt;p&gt;Grab the full talk on thetealpickle app&lt;br&gt;
Available on the App Store &lt;br&gt;
📱➡️ &lt;a href="https://apps.apple.com/us/app/thetealpickle/id1577045108"&gt;https://apps.apple.com/us/app/thetealpickle/id1577045108&lt;/a&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.youtube.com/watch?si=95kLfH5h93X7oHJH&amp;amp;v=NF4IAac5fms&amp;amp;feature=youtu.be" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--cikHIW44--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.ytimg.com/vi/NF4IAac5fms/maxresdefault.jpg%3Fsqp%3D-oaymwEmCIAKENAF8quKqQMa8AEB-AH-CYAC0AWKAgwIABABGCUgZShUMA8%3D%26rs%3DAOn4CLAY_JLMLkalYUm_4X2E_CfiTgobsA" height="450" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.youtube.com/watch?si=95kLfH5h93X7oHJH&amp;amp;v=NF4IAac5fms&amp;amp;feature=youtu.be" rel="noopener noreferrer" class="c-link"&gt;
          Getting Schwifty with macros [TALK] - YouTube
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Live coded a swift macro during the 2023 Geekle iOS Global developer conference. This is the presentation recording.In this talk, thetealpickle introduces ma...
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s---C1Kuxs4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.youtube.com/s/desktop/6561f2f9/img/favicon.ico" width="16" height="16"&gt;
        youtube.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>swift</category>
      <category>macros</category>
      <category>ios</category>
      <category>conference</category>
    </item>
    <item>
      <title>!! NEW PRODUCT!! 🎉🤗 THETEALPICKLE APP</title>
      <dc:creator>✨ thetealpickle 📱 </dc:creator>
      <pubDate>Thu, 02 Apr 2020 16:40:56 +0000</pubDate>
      <link>https://dev.to/thetealpickle/new-product-thetealpickle-app-5a15</link>
      <guid>https://dev.to/thetealpickle/new-product-thetealpickle-app-5a15</guid>
      <description>&lt;h1&gt;THETEALPICKLE is on the App Store!! &lt;a href="https://apps.apple.com/us/app/thetealpickle/id1478766318?ls=1"&gt;Currently available for iOS&lt;/a&gt;
&lt;/h1&gt;

&lt;h2&gt;&lt;b&gt;v1.0.1&lt;/b&gt;&lt;/h2&gt;

&lt;h4&gt;&lt;b&gt;with &lt;a class="mentioned-user" href="https://dev.to/thetealpickle"&gt;@thetealpickle&lt;/a&gt; content you can [resources like code snippets, view videos, read articles, listen to podcast episodes]&lt;/b&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fx428ipfuzdhqxnmsek6q.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fx428ipfuzdhqxnmsek6q.jpg" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;&lt;b&gt;with &lt;a class="mentioned-user" href="https://dev.to/thetealpickle"&gt;@thetealpickle&lt;/a&gt; projects you can [view projects, get insight, access project links]&lt;/b&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhyu7qu07yow3f9erdf24.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhyu7qu07yow3f9erdf24.jpg" width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;ANDDDDDD stay up to date with the latest in &lt;a class="mentioned-user" href="https://dev.to/thetealpickle"&gt;@thetealpickle&lt;/a&gt; universe. 😬&lt;/b&gt;&lt;/h4&gt;⠀&lt;br&gt;
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffkotehsd9wmukcij92pk.jpg" width="800" height="800"&gt;

&lt;p&gt;🔨 &lt;b&gt;Continuing to build out the experience, adding NEW features, and fixing bugs. Download and follow the journey!!!⁠⠀&lt;br&gt;
Every aspect of this app experience created by &lt;a class="mentioned-user" href="https://dev.to/thetealpickle"&gt;@thetealpickle&lt;/a&gt; 🥴⁠⠀&lt;/b&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swiftui</category>
      <category>mobile</category>
      <category>app</category>
    </item>
    <item>
      <title>[VIDEO]Refactoring Endpoints with Relationships in a Swift API 🌚♥️🌝(Swift 5.1/Vapor 3)</title>
      <dc:creator>✨ thetealpickle 📱 </dc:creator>
      <pubDate>Mon, 03 Feb 2020 15:18:03 +0000</pubDate>
      <link>https://dev.to/thetealpickle/refactoring-endpoints-with-relationships-in-a-swift-api-swift-5-1-vapor-3-imo</link>
      <guid>https://dev.to/thetealpickle/refactoring-endpoints-with-relationships-in-a-swift-api-swift-5-1-vapor-3-imo</guid>
      <description>&lt;p&gt;PART 2. In this video, I walk through refactoring endpoints to access and create model relationships within a Swift-based API. The Swift API created in this video leverages the Vapor 3 framework. Models naturally interact with other models and in Vapor these model interactions are made possible by creating relationships. There are two types of relationships, one-to-many and many-to-many.&lt;/p&gt;

&lt;p&gt;This video is PART 2 of the model relationship videos. Part 1 shows how to create relationships within the models and database.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/_MYO8VpnkeU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Code for this video can be found on &lt;a class="mentioned-user" href="https://dev.to/thetealpickle"&gt;@thetealpickle&lt;/a&gt;’s GitHub at the cheese-api-swift repository 👉🏾 &lt;a href="https://github.com/thetealpickle/cheese-api-swift"&gt;https://github.com/thetealpickle/cheese-api-swift&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Want to follow along? Get the starter code at the cheese-api-swift repository on the vapor-relationships-start branch 👉🏾 &lt;a href="https://github.com/thetealpickle/cheese-api-swift/tree/vapor-relationships-start"&gt;https://github.com/thetealpickle/cheese-api-swift/tree/vapor-relationships-start&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow me on social media &lt;a class="mentioned-user" href="https://dev.to/thetealpickle"&gt;@thetealpickle&lt;/a&gt; to stay connected with the Pickle universe 🌎&lt;/p&gt;

&lt;p&gt;&lt;a href="https://instagram.com/thetealpickle"&gt;https://instagram.com/thetealpickle&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/thetealpickle"&gt;https://twitter.com/thetealpickle&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/thetealpickle"&gt;https://github.com/thetealpickle&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Brought to you by JESSICA JEAN JOSEPH © THETEALPICKLE&lt;/b&gt;&lt;/p&gt;

</description>
      <category>thetealpickle</category>
      <category>backend</category>
      <category>vapor</category>
      <category>swift</category>
    </item>
    <item>
      <title>[VIDEO] Creating Model Relationships in a Swift API 🌚♥️🌝(Swift 5.1/Vapor 3)</title>
      <dc:creator>✨ thetealpickle 📱 </dc:creator>
      <pubDate>Sat, 01 Feb 2020 12:58:13 +0000</pubDate>
      <link>https://dev.to/thetealpickle/creating-model-relationships-in-a-swift-api-swift-5-1-vapor-3-51g9</link>
      <guid>https://dev.to/thetealpickle/creating-model-relationships-in-a-swift-api-swift-5-1-vapor-3-51g9</guid>
      <description>&lt;p&gt;In this video, &lt;a class="mentioned-user" href="https://dev.to/thetealpickle"&gt;@thetealpickle&lt;/a&gt; walks through creating relationships between models within a Swift-based API. The Swift API created in this video leverages the Vapor 3 framework. Models naturally interact with other models and in Vapor these model interactions are made possible by creating relationships. There are two types of relationships, one-to-many and many-to-many.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Code for this video can be found on &lt;a class="mentioned-user" href="https://dev.to/thetealpickle"&gt;@thetealpickle&lt;/a&gt;’s GitHub at 👉🏾 &lt;a href="https://github.com/thetealpickle/cheese-api-swift"&gt;cheese-api-swift repository&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Want to follow along? Get the starter code at the cheese-api-swift repository on the 👉🏾 &lt;a href="https://github.com/thetealpickle/cheese-api-swift/tree/vapor-relationships-start"&gt;vapor-relationships-start branch&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/0O1gUAOloQg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;One 👆🏾 to Many ✋🏾✋🏾✋🏾✋🏾✋🏾&lt;/h1&gt;

&lt;p&gt;A one-to-many relationship is referred to as a Parent/Child relationship. There is one parent model object which can map to many child objects. For example, a pet owner can have multiple pets, while each individual pet has one owner. In this scenario, the Owner model is the Parent model and the Pet model is the Child model. &lt;/p&gt;

&lt;h1&gt;Many ✋🏾✋🏾✋🏾✋🏾✋🏾 to Many ✋🏾✋🏾✋🏾✋🏾✋🏾&lt;/h1&gt;

&lt;p&gt;A many-to-many relationship is referred to as a Sibling relationship. Each sibling model object can map to many objects of the other sibling model, and vice versa. Continuing with the pet example, a pet can play with multiple toys and multiple toys can be played with by multiple pets. In this scenario, the Pet model and Toy model have a sibling relationship. Each model can map to multiple objects of the other model.&lt;br&gt;&lt;/p&gt;

&lt;h1&gt;Relationships in Vapor&lt;/h1&gt;

&lt;p&gt;Vapor makes setting up relationships between models relatively straight forward. With Parent/Child relationships, the models are extended to have a computed property which returns the parent/children. With Sibling relationships, the models are linked using a Pivot model which stores the mapping between the sibling object ID’s. The pivot acts as the middle-women between the two models, the Sibling models are then extended to have a computed property based off of the pivot which manages and returns the siblings.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Working with Parent/Child relationships differ from Sibling relationships, as a safe guard must be added in the form of a foreign key constraint. Adding a foreign key constraint prevents the following (1) a child from being added to a nonexistent parent object, (2) the parent model table from being deleted prior to deleting the child model table, (3) the parent model object is not deleted until all children objects are deleted.&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;a class="mentioned-user" href="https://dev.to/thetealpickle"&gt;@thetealpickle&lt;/a&gt; on the internet. Namaste.&lt;br&gt; &lt;br&gt;
Brought to you by JESSICA JEAN JOSEPH © THETEALPICKLE&lt;/b&gt;&lt;/p&gt;

</description>
      <category>thetealpickle</category>
      <category>backend</category>
      <category>swift</category>
      <category>vapor</category>
    </item>
    <item>
      <title>[VIDEO] Writing CRUD operations for a Swift API 🍭🍦 (Swift 5.1/Vapor 3)</title>
      <dc:creator>✨ thetealpickle 📱 </dc:creator>
      <pubDate>Fri, 10 Jan 2020 15:14:10 +0000</pubDate>
      <link>https://dev.to/thetealpickle/writing-crud-operations-for-a-swift-api-swift-5-1-vapor-3-1beo</link>
      <guid>https://dev.to/thetealpickle/writing-crud-operations-for-a-swift-api-swift-5-1-vapor-3-1beo</guid>
      <description>&lt;p&gt;HELLO INTERNET.👋🏾&lt;br&gt; In this video I go into creating CRUD endpoints for a Swift API !! 🖥&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/zutaVUCQs5s"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;CRUD stands for Creating Retrieving Updating Deleting&lt;br&gt;
Let's get CRUDy 😁&lt;/p&gt;

&lt;p&gt;CRUD operations are ways to interact with a database and in this video I show you how to create CRUD endpoints within a Swift API.&lt;/p&gt;

&lt;p&gt;This API is created using the Vapor framework and leverages the Fluent library for abstracting out our database interactions.  &lt;/p&gt;

&lt;p&gt;You can download the repository I am working on for this video on my &lt;a href="https://github.com/thetealpickle/cheese-api-swift"&gt;GitHub&lt;/a&gt; at my cheese-api-swift repository💪🏾&lt;br&gt;
Check out the other videos in the series! 📺&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Stay connected with me on the internet &lt;a class="mentioned-user" href="https://dev.to/thetealpickle"&gt;@thetealpickle&lt;/a&gt;, leave a response or send me a tweet on twitter. Dont forget to share the ❤️&lt;br&gt;&lt;br&gt;
Namaste. Jessica 🥔&lt;br&gt;
&lt;/b&gt;&lt;/p&gt;

</description>
      <category>thetealpickle</category>
      <category>swift</category>
      <category>backend</category>
      <category>vapor</category>
    </item>
    <item>
      <title>[VIDEO] Getting your Swift API interacting with a MySQL database 💾 (Swift 5.1/Vapor 3)</title>
      <dc:creator>✨ thetealpickle 📱 </dc:creator>
      <pubDate>Fri, 03 Jan 2020 06:45:02 +0000</pubDate>
      <link>https://dev.to/thetealpickle/getting-your-swift-api-interacting-with-a-mysql-database-swift-5-1-vapor-3-4053</link>
      <guid>https://dev.to/thetealpickle/getting-your-swift-api-interacting-with-a-mysql-database-swift-5-1-vapor-3-4053</guid>
      <description>&lt;p&gt;HELLO INTERNET. Continuing our Swift backend takeover 😬 by configuring our API with a popular, powerful database MySQL 🖥&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/vFosIpeUkbU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;⚡️ Getting our database configured, let's get it! 💪🏾&lt;br&gt;
Check out the other videos in the series! 📺&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Stay connected with me on the internet &lt;a class="mentioned-user" href="https://dev.to/thetealpickle"&gt;@thetealpickle&lt;/a&gt;, leave a response or send me a tweet on twitter. Dont forget to share the ❤️&lt;br&gt;&lt;br&gt;
Namaste. Jessica 🥔&lt;br&gt;
&lt;/b&gt;&lt;/p&gt;

</description>
      <category>thetealpickle</category>
      <category>backend</category>
      <category>vapor</category>
      <category>swift</category>
    </item>
    <item>
      <title>[VIDEO] Creating APIs using Swift?? 🥴 Hi Vapor (Swift 5.1/Vapor 3)</title>
      <dc:creator>✨ thetealpickle 📱 </dc:creator>
      <pubDate>Wed, 01 Jan 2020 13:17:23 +0000</pubDate>
      <link>https://dev.to/thetealpickle/creating-apis-using-swift-hi-vapor-swift-5-1-vapor-3-i24</link>
      <guid>https://dev.to/thetealpickle/creating-apis-using-swift-hi-vapor-swift-5-1-vapor-3-i24</guid>
      <description>&lt;p&gt;NEW VIDEO!!!&lt;/p&gt;

&lt;p&gt;Calling all fellow iOS devs to start drinking backend with Swift. Our time is NOW 😈&lt;/p&gt;

&lt;p&gt;Stay connected with me on the internet &lt;a class="mentioned-user" href="https://dev.to/thetealpickle"&gt;@thetealpickle&lt;/a&gt; &lt;br&gt;
Namaste. Jessica.&lt;/p&gt;

</description>
      <category>swift</category>
      <category>thetealpickle</category>
      <category>backend</category>
      <category>vapor</category>
    </item>
    <item>
      <title>SwiftUI @Environment and BindableObject</title>
      <dc:creator>✨ thetealpickle 📱 </dc:creator>
      <pubDate>Thu, 10 Oct 2019 10:40:17 +0000</pubDate>
      <link>https://dev.to/thetealpickle/swiftui-environment-and-bindableobject-1oi6</link>
      <guid>https://dev.to/thetealpickle/swiftui-environment-and-bindableobject-1oi6</guid>
      <description>&lt;p&gt;The drop of SwiftUI this summer 2019 shook the iOS/Swift dev game. The way views are created and how data flows through apps have become declarative. BindableObject, Environment, State, Binding are new tools to cut through the waves and make it to the other side.&lt;/p&gt;




&lt;h1&gt;Property Wrapper &amp;amp; Protocols&lt;/h1&gt;

&lt;p&gt;New in Swift 5.1, property wrappers. Property wrappers wrap property access with additional behavior. @Environment is a property wrapper.&lt;/p&gt;

&lt;p&gt;Protocols define a set of requirements which are then implemented by the adopting class, structure, or enumeration. BindableObject is a protocol.&lt;/p&gt;

&lt;h1&gt;Environment&lt;/h1&gt;

&lt;p&gt;The Environment property wrapper is part of the new Combine framework and is designed as a general purpose container for all types of data. The Environment data is used for indirect data passing and pushes dependencies down the hierarchy. Environment data has read-only access.  &lt;/p&gt;

&lt;p&gt;Writing data into the environment is done by using the .environmentObject modifier on the object you would like to go into the environment.&lt;/p&gt;

&lt;h2&gt;Environment vs Binding&lt;/h2&gt;

&lt;p&gt;Binding is another data flow tool for SwiftUI views, more information can be found here. &lt;/p&gt;

&lt;p&gt;Environment and Binding are two different tools with the same core functionality, passing dependencies through the view hierarchy. If your entire app is a read-only app, the app could be built using entirely one OR the other. The question, how would you like to access your data?&lt;/p&gt;

&lt;p&gt;Environment can be leveraged as a work around from passing a model at every view transition point. Environment is like bag full of candy being passed around the group. Whereas with Binding, everyone holds and passes around each individual candy. &lt;/p&gt;

&lt;p&gt;Another note, Binding provides read/write access. Environment is read-only. For data which child views need to be able to update, the Binding wrapper should be used instead.&lt;/p&gt;

&lt;h1&gt;BindableObject&lt;/h1&gt;

&lt;p&gt;The BindableObject protocol is part of the new Combine framework and is designed to provide an external reference to your custom model and have SwiftUI track attribute changes over time using publishers. &lt;/p&gt;

&lt;p&gt;Combine uses a Publisher, Operator, Subscriber model flow. By conforming your custom model to the BindableObject protocol, the model becomes setup to trigger view changes to all subscribers in the view hierarchy.&lt;/p&gt;

&lt;p&gt;BindableObject is a way to bring SwiftUI’s declarative data handling to custom models. BindableObject brings us into the beginning dive into the new Combine framework. A new age.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;a class="mentioned-user" href="https://dev.to/thetealpickle"&gt;@thetealpickle&lt;/a&gt; on the internet. Namaste.&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;This article was brought to you by JESSICA JEAN JOSEPH © THETEALPICKLE&lt;/p&gt;

</description>
      <category>thetealpickle</category>
      <category>swiftui</category>
      <category>ios</category>
      <category>swift</category>
    </item>
    <item>
      <title>SwiftUI @State and @Binding</title>
      <dc:creator>✨ thetealpickle 📱 </dc:creator>
      <pubDate>Thu, 03 Oct 2019 10:46:19 +0000</pubDate>
      <link>https://dev.to/thetealpickle/swiftui-state-and-binding-23j5</link>
      <guid>https://dev.to/thetealpickle/swiftui-state-and-binding-23j5</guid>
      <description>&lt;p&gt;The drop of SwiftUI this summer 2019 shook the iOS/Swift dev game. The way views are created and how data flows through apps have become declarative. BindableObject, Environment, State, Binding are new tools to cut through the waves and make it to the other side.&lt;/p&gt;




&lt;h1&gt;Property Wrappers&lt;/h1&gt;

&lt;p&gt;New in Swift 5.1, property wrappers. Property wrappers wrap property access with additional behavior. State and Binding are property wrappers. &lt;/p&gt;

&lt;h1&gt;Source of Truth&lt;/h1&gt;

&lt;p&gt;Source of truth is the biggest change with SwiftUI. Pre-SwiftUI, view controllers were in charge of their own data and if developers wanted a “syncing” effect, they would need to create it themselves. &lt;em&gt;begins reminiscing pre-swiftui data syncing&lt;/em&gt; bugs bugs bugs.&lt;/p&gt;

&lt;p&gt;Apple said fuck that, use @State&lt;/p&gt;

&lt;h2&gt;State&lt;/h2&gt;

&lt;p&gt;With SwiftUI, the emphasis is on your app having one source of truth, which is defined using @State. State lives in this magically bubble outside of your view. Views are volatile. State is persistent storage created by SwiftUI on your view’s behalf.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@State var isPickle: Bool = true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The @State property wrapper tells system, the property is a value that changes over time and the views depends on the value. Any runtime changes to a State wrapped property are recognized and triggers a re-rendering of only the portions of the views which utilize the property’s value #efficient. Since changes flow down to all of the view's children, State wrapped properties should be owned by one view which is the top-most view of the application.&lt;/p&gt;

&lt;p&gt;Speaking of children, how the heck does State get passed through to other views if State should be defined in only one view??? Binding 😉&lt;/p&gt;

&lt;h2&gt;Binding&lt;/h2&gt;

&lt;p&gt;The @Binding property wrapper tells the system the property has read/write access to the value without ownership. Binding properties have their values passed in from a parent view as a binding, for this reason, providing a default value is not needed. &lt;/p&gt;

&lt;p&gt;Creating a binding occurs by passing in a State property with the $ prefix and provides the child view with a reference to the State property.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@State var isPickle: Bool = true

var body : some View {
   ChildView(showPickleEmoji: $isPickle )
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the ChildView&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Binding showPickleEmoji: Bool
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Binding wrapped properties are provided a reference to the app’s State so any changes to values on Binding wrapped properties trigger changes across the application to whatever view portions are dependent on that State’s value.&lt;/p&gt;

&lt;h1&gt;Ownership&lt;/h1&gt;

&lt;p&gt;The biggest difference between State and Binding is ownership. Views with property's marked with State have ownership. The system created storage on that specific views behalf. With property's marked with Binding, the view has read and write access, but not ownership.&lt;/p&gt;

&lt;p&gt;Like living with someone and having a pet. The pet is in both individuals lives. Both individuals take care of the pet, give the pet affection, take the pet out. They both have access. BUT, on the day one decides to move, the pet ultimately stays with the owner.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;a class="mentioned-user" href="https://dev.to/thetealpickle"&gt;@thetealpickle&lt;/a&gt; on the internet. Namaste.&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;This article was brought to you by JESSICA JEAN JOSEPH © THETEALPICKLE&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swift</category>
      <category>swiftui</category>
    </item>
    <item>
      <title>Choosing a Database Manager. SQL or Nah?</title>
      <dc:creator>✨ thetealpickle 📱 </dc:creator>
      <pubDate>Fri, 27 Sep 2019 15:04:21 +0000</pubDate>
      <link>https://dev.to/thetealpickle/choosing-a-database-manager-sql-or-nah-41gj</link>
      <guid>https://dev.to/thetealpickle/choosing-a-database-manager-sql-or-nah-41gj</guid>
      <description>&lt;p&gt;Going down the SQL road as a noob, what seemed like a walk in the park quickly turns into a multi headed dragon readying itself to breathe fire down your throat. Here’s your shield bitch.&lt;/p&gt;

&lt;h1&gt;Database vs Database Manager.&lt;/h1&gt;

&lt;p&gt;A database is a collection of data. Databases handle data in ways which allow systematic support for data manipulation and storage. Database managers handle databases. Within a project there are multiple considerations for managers: are multiple databases being accessed, does data representation need manipulation before add, what are the restriction levels of database access. Database managers are clutch.&lt;/p&gt;

&lt;h1&gt;Relational DBMS.&lt;/h1&gt;

&lt;p&gt;Lol. DBMS.&lt;br&gt;
DBMS stands for Database Management System 🙃 &lt;/p&gt;

&lt;p&gt;Relational DBMSs define their structure as table relationships. An example: A box of tech shared within a family. The list of tech item data the family owns goes in its own table, the list of family member data go in another table. A relation can be formed between a family member and the tech they are currently in possession of. This structure makes adding a family member and adding tech a relatively easy addition. Insert a row of data, avoiding any database restructuring with previously existing data. &lt;/p&gt;

&lt;p&gt;A note to keep in mind, Relational DBMSs work based off of schemas. The schema, predefines the table structure. When you want to add a new column to a table, a new schema must be defined and the preexisting data must be migrated to the new structure. For large databases with constantly changing structures, this can result in frequent downtime. &lt;/p&gt;

&lt;p&gt;Relational databases work most effectively by knowing, in advanced, the structure of the table as well as the data points that will be used. Unstructured, unknown-in-advanced data struggles with this type of manager. &lt;/p&gt;

&lt;p&gt;Relational Databases include SQLite, MySQL and PostgreSQL.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;b&gt;SQLite.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;SQLite, is, light 😬.&lt;br&gt;
As the name suggests, SQLite is a lightweight database for simple local data storage. Part of SQLite’s lightweight nature comes from its server less architecture. SQLite does not need to be installed before using. This zero configuration setup equals no configuration files.&lt;/p&gt;

&lt;p&gt;SQLite is a self contained database with minimal support from external libraries or the operating system it’s running on. Embedded devices (phones, handhelds), internet of things, devices which often operate without human support, have environments which are suitable for SQLite.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;b&gt;MySQL.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;MySQL was designed for speed and reliability, an ideal database for many use cases. MySQL’s speed and reliability comes at the cost of not being fully SQL compliant, depending on the use case there are some functional limitations. Many large applications such as Facebook have components powered by MySQL databases.&lt;/p&gt;

&lt;p&gt;A few things to consider about MySQL, its license and propriety features, slowed development and SQL compliant and function limitation.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;b&gt;PostgreSQL.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;PostgreSQL is “the most advanced open-source relational” DBMS, as per PostgreSQL 🙃. PostgreSQL is designed to be highly extensible and standard compliant. &lt;/p&gt;

&lt;p&gt;PostgreSQL is relational, with a splash of object databases. Object DBMSs are structured to hold data as objects as opposed to loose pieces of language-independent data.&lt;/p&gt;

&lt;p&gt;PostgreSQL is SQL compliant and has an effective way of handling concurrency (multi tasking) without read locks. A main fact to consider with PostgreSQL, memory performance, which quickly builds with each new connection. As read-heavy operations go, PostgreSQL’s structure is less performant than MySQL.&lt;/p&gt;

&lt;h1&gt;SQL. OR NAH? NoSQL.&lt;/h1&gt;

&lt;p&gt;If SQL is the fart from last month that permanently stained the couch, NoSQL is the morning fart that’s directly tied to last night’s bucket of sharp cheddar cheese which was washed down by a gallon of whole cow milk 🤮 But you appreciate the stench because of the added variety to the space.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;b&gt;NoSQL.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;Not only SQL.&lt;/p&gt;

&lt;p&gt;Relational DBMSs are effective when the structure is either known in advanced due to their predefined schemas. Need to make a structure change? Create a new schema and migrate old data to the new. Highly ineffective with large databases that have dynamic structures. &lt;/p&gt;

&lt;p&gt;NoSQL on the scene: “I got the sauce”&lt;/p&gt;

&lt;p&gt;NoSQL shines with agile. NoSQL databases have more options in handling complex data structures (document based, graph based, key-value pair, etc). NoSQL is an “unstructured” database. NoSQL databases are designed to handle unstructured data models in a scalable way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kvr_MnJ0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/fcyhc3y2515b69a6mz6z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kvr_MnJ0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/fcyhc3y2515b69a6mz6z.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SQL or Nah?&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/thetealpickle"&gt;@thetealpickle&lt;/a&gt; on the internet. Namaste. &lt;/p&gt;

&lt;p&gt;This article was brought to you by JESSICA JEAN JOSEPH © THETEALPICKLE&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>backend</category>
      <category>database</category>
      <category>sql</category>
    </item>
    <item>
      <title>Swift on the Server. WTF.</title>
      <dc:creator>✨ thetealpickle 📱 </dc:creator>
      <pubDate>Thu, 26 Sep 2019 20:52:57 +0000</pubDate>
      <link>https://dev.to/thetealpickle/swift-on-the-server-wtf-37pe</link>
      <guid>https://dev.to/thetealpickle/swift-on-the-server-wtf-37pe</guid>
      <description>&lt;p&gt;Swift is an insidious fart that is slowly taking over the world and resistance is futile.&lt;/p&gt;

&lt;h1&gt;What is a server?&lt;/h1&gt;

&lt;p&gt;Server or Backend, two names for the same entity. Servers handle the interaction between an application and a database. The database stores the data. App platforms are designed to be able to communicate directly with databases. In many cases, i.e. an informational/read-only application, speaking directly to the database suffices. For other apps, a backend comes in clutch.&lt;/p&gt;

&lt;p&gt;Having a backend insures your data goes through the same flow for all of your platforms (iOS, Android, Web, etc). Shifting the data processing to the backend allows the front end applications to be more lightweight and nimble. A backend can also centralize analytics across platforms, making data syncing more attainable while reducing duplicating/duplicate checking.&lt;/p&gt;

&lt;p&gt;Cool, so we know what a server is and why it's pretty useful in most cases to create one. The sauce.&lt;/p&gt;

&lt;h1&gt;Swift on the backend.&lt;/h1&gt;

&lt;p&gt;As server languages stand the most popular options are Javascript and Python. For many web developers who are already using Javascript on the front-end leveraging their Javascript knowledge on the backend with node.js saves time. For cleaner coding practices and front-end platform uses beyond web, Python and its frameworks - typically Flask or Django, make it a more suitable option.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UoymxqHT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/1cmppc0e5ylp3eg0pm9l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UoymxqHT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/1cmppc0e5ylp3eg0pm9l.png" width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Server side Swift bring compiled language performance to a space which typically works with runtime languages. If close to native speed is needed, server side swift should be a consideration.&lt;/p&gt;

&lt;p&gt;Swift as a language is elegant and nicely balances type safety and high level programming capabilities with approachability. If Swift is already being used on front-end applications, that Swift knowledge can be leveraged and applied to the backend side as well.&lt;/p&gt;

&lt;p&gt;There are three main Server side Swift frameworks, Vapor, Kitura, and Perfect.&lt;/p&gt;

&lt;h1&gt;Swift Package Manager and Xcode 11.&lt;/h1&gt;

&lt;p&gt;The 2019 update of Xcode, Xcode 11, integrates Swift Package Manager within Xcode. Pre-Xcode 11, Cocoapods was the defacto dependency manager for Swift/Objc projects. The integration of a native swift package manager into Xcode increased my allure for Swift on the Server.&lt;/p&gt;

&lt;p&gt;Things are different now 🥴&lt;/p&gt;

&lt;p&gt;Often times models used within the Swift Server are copied from the iOS project. A swift package can be created with all 'central' models and entities and shared between the app and server. The added benefit of the package manager being integrated into Xcode assures that packages can be automatically configured to upgrade to the latest version, bug fix versions, or not upgrade at all, staying fixed on that one version.&lt;/p&gt;

&lt;p&gt;Turn up the coding sun, things just became more D.R.Y (Don't Repeat Yourself) &lt;/p&gt;
&lt;p&gt;#serverSideSwift&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;a class="mentioned-user" href="https://dev.to/thetealpickle"&gt;@thetealpickle&lt;/a&gt; on the internet. Namaste.&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;This article was brought to you by JESSICA JEAN JOSEPH © THETEALPICKLE&lt;/p&gt;

</description>
      <category>backend</category>
      <category>beginners</category>
      <category>swift</category>
      <category>server</category>
    </item>
    <item>
      <title>iOS Dev Newbie Consideration 🤔🖐🏾</title>
      <dc:creator>✨ thetealpickle 📱 </dc:creator>
      <pubDate>Mon, 05 Aug 2019 21:46:47 +0000</pubDate>
      <link>https://dev.to/thetealpickle/ios-dev-newbie-consideration-3375</link>
      <guid>https://dev.to/thetealpickle/ios-dev-newbie-consideration-3375</guid>
      <description>&lt;p&gt;If you're new to iOS Dev in 2019, the thought of SwiftUI or UIKit probably crossed your mind! My answer ♥️&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--C_1yKobN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/h5x7psfy0buq5uigyaoy.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C_1yKobN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/h5x7psfy0buq5uigyaoy.PNG" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>thetealpickle</category>
      <category>ios</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
