For example, the following HeaderView has a title and an image property, but keeps the underlying views used to render those properties private, and then manually connects those pieces together: The benefit of the above pattern is that it gives each view a much smaller API surface, which in turn makes it less likely that our views will be misused somehow (for example by configuring a subview in a way that the parent view wasn’t designed to handle). 5 НОЯБ. For example, when applying a somewhat larger amount of corner radius to a given view, using the default settings can result in corners that are perhaps not as smooth as we’d expect. What are the different phases involved in determining a given view’s layout, how do concepts like layout priorities and flexibility work, and what makes SwiftUI different from UIKit and AppKit in terms of layout? wrap-up; summary; Published on 30 Dec 2018. Making Swift code extensible through plugins (swiftbysundell.com) 54 points by ingve 31 days ago | past | web | 5 comments: Lightweight API Design in Swift (swiftbysundell.com) 109 points by ingve 38 days ago | past | web | 56 comments: Podcast interview about server-side Swift (swiftbysundell.com) Importing Swift packages into a playground in Xcode 12 By John Sundell Published at 12:20 GMT, 23 Jun 2020 An exciting new feature in Xcode 12 is that Swift packages can now be directly imported into a playground. It would be so much nicer if we could make the compiler infer that type based on which enclosing type that our properties are being defined in. Simplified navigation based on content type, and the new Discover feature is now easily accessible through the main top navigation menu. Of course, it’s still a good idea to split certain views up into completely separate types (especially if we want to make some of those parts easier to reuse), but the above technique can be great to keep in mind when we want to break up a larger view while still letting its implementation continue to act as a single unit. I wish John could squeeze in more time and make this weekly instead of biweekly. Daily coverage of Apple’s WWDC 2019 conference, by John Sundell. Let’s take a quick look at the main APIs that enable us to do just that. // the return statements in its body do not have matching If we use proper waiting APIs when writing asynchronous tests, the test runner will only pause for the whole timeout interval when a given condition or expectation wasn’t fulfilled — so using a larger timeout won’t slow down the overall execution of our tests, but will give our operations some extra time to finish when running in more resource-constrained environments, which CI servers typically are. // address, so if multiple matches were found, then Through features like custom and overloaded operators, key paths, function/result builders, and more, there are a lot of opportunities for us to tweak Swift’s syntax for particular use cases. One way to do that would be to use the aforementioned approach of splitting its body property up into separate View types — which in this case could be implemented as private nested types in order to give our code a neat degree of namespacing: With the above in place, we’ll now be able to drastically simplify our main ProfileView, since we can now implement its body just by instantiating our BackgroundView and InfoView within their respective ZStack and ScrollView wrappers: However, while the above approach is definitely a great option in many cases, it sort of feels a bit “heavy” in this kind of situation — given that we both need to define multiple types just to split our code up, and that we need to pass parts of our model data down into those nested views, which can quickly end up feeling like unnecessary busywork. However, the compiler is only able to infer the underlying return type when all of the code branches within a given function or computed property return the exact same type. Applying rounded corners to a UIKit or SwiftUI view | Swift by Sundell swiftbysundell.com. For example, by just looking at the following User type, we can’t tell whether the emailAddress that is being stored within it has actually been passed through any kind of validation, since that logic is currently completely detached from that value: However, it turns out that Swift actually has a built-in pattern that could let us solve the above set of problems quite elegantly. // This assumption is definitely not safe to make in The way that SwiftUI solves the problem of enabling any view to be injected is by making the host view generic over the type of view that it’ll contain. To demonstrate, let’s increase both the font size and the corner radius of our button, and if you use the PREVIEW button below, you can see that our corners now end up having quite a sharp look: Thankfully, that problem is easy to fix. SwiftUI ships with a special view called AnyView, which can be used as a type erased wrapper to enable multiple view types to be returned from a single function or computed property, or to let us reference a view without having to know its underlying type. Password: Swift by Sundell John Sundell Technology 5.0 • 6 Ratings; Listen on Apple Podcasts. What a good find by Sundell about Property Wrapper! Ellen Shapiro returns to the show to discuss framework and SDK development, and how that often requires a somewhat different process from app development. In this case, we might also need to be careful to keep each of our workflow configurations in sync, which could be done using a Git-hosted workflow YML file. Email-based accounts: Email: Forgot? Hehe.. thumb up for the amazing work! Swift by Sundell John Sundell Technology 4.7, 15 Ratings; Listen on Apple Podcasts. Now, to take things even further, let’s also make it possible to use key paths to form filter queries that compare a given property against any kind of Equatable value. In-depth conversations about Swift and software development in general, hosted by John Sundell. Rather than sticking to a strict weekly cadence, you’ll now frequently see new articles posted that’ll both include my signature deep dives into different Swift topics, but also shorter posts, links, news stories, and more. Listen on Apple Podcasts. Although it might not yet be a fully baked language feature that we can rely on within production code (unless we’re willing to take the risk involved in using underscore-prefixed language features), the fact that Swift’s property wrappers do in fact support referencing their enclosing instance is incredibly powerful. However, since that protocol doesn’t actually have any requirements, and since we could always fall back to using AnyProxy directly, that’s not a big issue. In-depth conversations about Swift and software development in general, hosted by John Sundell. In-depth conversations about Swift and software development in general, hosted by John Sundell. From Matteo Manferdini, developer and author with more than 10 years experience developing for iOS Free guide: Architecting SwiftUI apps with MVC and MVVM YES, SEND ME THE FREE GUIDE It’s easy to make an app by throwing some code together. These days, it’s incredibly common for apps to have to work with email addresses one way or another, and when doing so, we typically want to perform some kind of client-side validation on any addresses that were entered by the user. When implementing the above API, we likely also want to prevent our property from being mutated using value semantics (since we want all mutations to go through our subscript), which can be done by marking the standard wrappedValue property as unavailable — like this: Note how we have to give wrappedValue both a getter and a setter, since otherwise the compiler will treat our property wrapper as immutable. Importing Swift packages into a playground in Xcode 12 By John Sundell Published at 12:20 GMT, 23 Jun 2020 An exciting new feature in Xcode 12 is that Swift packages can now be directly imported into a playground. I really learn a lot of things so far. Also, API design, GraphQL, using the standard library’s protocol-oriented design, and more. // Error: Function declares an opaque return type, but After all, Combine’s "values over time”-focused design is quite a perfect fit for modeling progress updates, since we want to send a number of percentage values over time, and to then end with a completion event, which is exactly what a Combine publisher does. Really nice! Swift is a true modern marvel—easy to pick up, comfortable to use, and loaded with features. Really nice! I hope that you found this article useful. Swift by Sundell. 89: “Framework and SDK development”, with special guest Ellen Shapiro. In-depth conversations about Swift and software development in general, hosted by John Sundell. Now, while we could simply copy/paste our regular expression-based validation logic from before into our new EmailAddress type, let’s also use this opportunity to explore a different (and, if you ask me, better) way of performing our validation — by using Foundation’s NSDataDetector API. A Swift by Sundell spin-off. Swift by Sundell podcast on demand - In-depth conversations about Swift and software development in general, hosted by John Sundell. ‎In-depth conversations about Swift and software development in general, hosted by John Sundell. For example, the built-in HStack container is defined as a generic that has a Content type, which in turn is required to conform to the View protocol: Using the same kind of generic type constraint, we can make our ItemRow adopt the exact same pattern — which will let us directly inject any View-conforming type as our accessoryView: Not only does the above give us better performance during view updates (since all of the types involved are now well-defined and transparent to the type system), it also makes our call sites simpler as well, since each accessoryView no longer has to be manually wrapped within an AnyView: While SwiftUI makes many aspects of UI development simpler, there’s no denying that it’s an incredibly complicated framework that makes heavy use of some of Swift’s most powerful features. A look at what it means for SwiftUI to be a value-driven UI framework, and how we might need to break certain assumptions when adopting SwiftUI within our projects. That’s really important in terms of the API’s design, since it makes the whole syste… By default, a Swift property wrapper is implemented by annotating a given type (usually a struct) with the @propertyWrapper attribute, and by then declaring a wrappedValue property within that type that’ll act as the underlying storage for the value that’s being wrapped. This year, however, entire apps can now be defined directly using SwiftUI, thanks to a few new additions to its API. Email-based accounts: Email: Forgot? Sorry, there was a problem looking up your Overcast accounts. In-depth conversations about Swift and software development in general, hosted by John Sundell. Various tips on how to handle a major paradigm shift like the move to SwiftUI. Mention Swift by Sundell when requesting a free demo to get a 20% discount on your license for a whole year. There's a somewhat hidden API that allows access to an enclosing type instance! Слушать в Apple Podcasts. In-depth conversations about Swift and software development in general, hosted by John Sundell. On this special episode of the show, John wraps up the 2020 season by revisiting some of the key themes and topics that were discussed on the show during the year. Like its name implies, Swift’s property wrappers feature enables us to wrap a given property value within a custom type, which in turn lets us apply … Request a free demo today. Not only does DetailsPro run real SwiftUI code under the hood, which ensures that the design of your views will perfectly match how they’ll eventually get rendered within an app, it also lets you easily export that code as high-quality Swift snippets. However, it also requires a fair amount of boilerplate, as we currently have to manually forward each property’s getter and setter to the underlying view that’s used for rendering. There's a somewhat hidden API that allows access to an enclosing type instance! Not only can that often improve the overall speed of getting a given Pull Request or commit green-lit by the CI system, it can also make debugging failures easier, as each workflow will end up having a much more narrow scope. // underlying types. One way to do that would be to use the fact that any Swift key path literal can be automatically converted into a function, which lets us use the following compact syntax when filtering on any boolean property, such as isRead in this case: That’s really nice, however, the above syntax can only be used when we want to compare against true — meaning that if we wanted to create a similarly filtered array containing all unread articles, then we’d have to use a closure (or pass a function) instead: That’s certainly not a big problem, but if the above kind of operation is something that we’re performing in many different places across our code base, then we might start to ask ourselves: “Wouldn’t it be great if we could also use that same nice key path syntax for negated booleans as well?”. Another really common type of situation in which AnyView is often used is when we want to store a given view in a property without having to know its exact type. 89: “Framework and SDK development”, with special guest Ellen Shapiro. JAN 18, 2021. Up until this year’s release, apps built using SwiftUI have still needed to use mechanisms from Apple’s previous UI frameworks, UIKit and AppKit, to implement their entry points — such as using UIApplicationDelegate to define an app delegate for an iPhone or iPad app.. Let me know, along with your questions, comments or feedback, either via Twitter or email. Here’s an example: Depending on the server that our POST request is being sent to, we might also want to configure our URLRequest instance further, for example by giving it a Content-Type header. Finally, let’s also take a look at how we could convert the above FileUploader to use Combine instead of multiple closures. You could, for example, run all of a project’s UI tests within a separate workflow (since those tend to take the longest to run), or run the tests for any internal frameworks separately, or use separate workflows to test your app using multiple Xcode/SDK versions. Support Swift by Sundell by checking out this sponsor: Bitrise : My favorite continuous integration service. Also, discussions on Swift’s overall design, why it puts such a strong emphasis on value types and protocols, and how it’s been influenced by other languages. In-depth conversations about Swift and software development in general, hosted by John Sundell. Daniel Steinberg joins John to discuss how various functional programming patterns can be adopted in Swift, and how many of those patterns can be found in both the standard library and in frameworks like Combine and SwiftUI. Accessing a Swift property wrapper’s enclosing instance | Swift by Sundell swiftbysundell.com. Perhaps the simplest way to use URLSession to perform a POST request is to use the URLRequest-based overloads of its various dataTask APIs (which support both delegate and closure-based callbacks, as well as Combine). Thanks for reading, and hope you’ll enjoy this new version of Swift by Sundell! For example, let’s say that we’re working on an app that ships on both iOS and macOS. But without best practices and robust architecture, you soon end up with unmanageable spaghetti […] In-depth conversations about Swift and software development in general, hosted by John Sundell. Articles, podcasts and news about Swift development, by John Sundell. The latest episode of John Sundell’s podcast “Swift by Sundell” is out today, featuring the first-ever interview with Apple software engineers Holly Borla and Grace Kendall. When it comes to unit and UI tests in particular, one of my top tips on how to avoid flakiness is to always use generous timeouts when calling APIs like waitForExpectations and waitForExistence, and to avoid using blocking waiting techniques, such as sleep. Used for more than just app development, Swift is now used for web services, machine learning, and beyond. The only requirement is that the enclosing type needs to be a class, since the above subscript uses ReferenceWritableKeyPath, which relies on reference semantics. Chris Eidhof returns to the show to go on a deep dive into the SwiftUI layout system. While we could build and test both of those two variants within the same Bitrise workflow, it’ll most likely be faster to use two separate ones. Genius Scan : Add advanced document scanning features to your app using Genius Scan’s powerful SDK. Technology. Regardless if you’re completely new to the concept of continuous integration, or if you already have an existing setup, now might be a great time to prepare each of your projects for the upcoming year by ensuring that you have some really solid verifications in place — and if you’re looking for a platform to implement your CI workflows on, then I really recommend checking out Bitrise. ⚠️ Although all of the language features that are covered in this article are official parts of Swift, we’re going to make use of an API that has an underscore prefix, which should always be done with caution, since such APIs are bound to change at any point. I look forward to every episode that comes out and get very exited when I see a new one pop up. For a much more thorough, and also more advanced, variant of the above technique, check out “Predicates in Swift”, and feel free to send me your questions and comments via either Twitter or email. Hopefully, that’ll continue to make this site an even richer resource for the Swift community, and for iOS and Mac developers of all skill levels. Like its name implies, Swift’s property wrappers feature enables us to wrap a given property value within a custom type, which in turn lets us apply transforms and run other kinds of logic whenever that value is modified. Also, how to make a code base accessible to new team members, learning from open source, getting started with Swift-based web development, and much more. Over the years, Foundation’s built-in URLSession API has grown to become a versatile and very powerful networking tool, to the point where third party libraries are often no longer required to perform standard HTTP network calls in a simple and straightforward way. Genius Scan’s SDK features advanced image processing that’s the result of over 10 years of research and development and can be fully customized and integrated into your app with just one line of code. However, it turns out that there is an alternative, somewhat hidden API that actually does give us access to each enclosing instance, which can enable us to adopt some really interesting patterns. If you are interested in iOS/Swift at all, you should be listening to Swift by Sundell. One of my favorite things about Bitrise is just how easy it is to configure. // we fail our validation process and return nil: // Verify that the found link points to an email address, Like we took a look at in “Adding SwiftUI’s ViewBuilder attribute to functions”, all that we have to do to utilize that same powerful view building functionality is to use the @ViewBuilder attribute — which in turn lets us express multiple types of views within the same scope, like this: Note how we’re no longer using any return statements within our new textView property implementation, since each expression will now be parsed by SwiftUI’s ViewBuilder, rather than being returned separately. Just like how we previously took inspiration from SwiftUI itself when using ViewBuilder, let’s do the same thing here. DetailsPro lets both developers and designers quickly build prototypes completely visually, using real SwiftUI components, which also makes it an excellent way to familiarize yourself with SwiftUI’s overall APIs and features. // To ensure that our request is always sent, we tell → Get DetailsPro for free from the App Store. Finally, we’ll store all progress event handlers in a dictionary based on each upload task’s ID, so that we’ll later be able to call those closures within our delegate protocol implementation: Next, let’s implement the URLSessionTaskDelegate protocol, which is a specialized version of the base URLSessionDelegate protocol that adds a few extra methods to enable us to observe task-specific events. Unfortunately, SwiftUI doesn’t include any built-in way to only round specific corners, but we could always accomplish that by either implementing a custom Shape, or a UIView that uses the maskedCorners Core Animation API that we took a look at earlier. That’ll become useful if we, for example, wanted to filter our articles array based on each article’s category. The good news is that Bitrise supports using the same project for multiple workflows, all that we have to do is to configure each one as a new app (but using the same repository). Try it for free for two months at clubhouse.io/sundell. For example, one way to use the continuous style to round a view’s corners is to use a RoundedRectangle shape as its background, rather than using a color combined with the cornerRadius modifier: The above will give us the same result as when we were assigning the .continuous corner curve to our UIKit button’s CALayer. For example, all lists and cards now feature tweaked margins and padding to make them easier to browse and read, the ads have been completely redesigned, and more. To demonstrate, let’s create a FileUploader class (which needs to be a subclass of Objective-C’s NSObject). For example, Publish (which is the static site generator used to build all of Swift by Sundell) has two separate Bitrise workflows, one for macOS and one for Linux, that can both run in parallel. While 2018 has been the first year since Swift was introduced in 2014 without a new major release — it has still proven to be quite a transformative year for the language, its usage, and the community as a whole. That means that we can also define our own RawRepresentable types as well, which lets us encapsulate our email validation logic in a very neat way — like this: Note that our new EmailAddress type also conforms to Codable, which we get support for without having to write any additional code. A Swift by Sundell spin-off. Conclusion With features like property wrappers and function builders, Swift is moving into some very interesting new territories, by enabling us to add our own logic to various fundamental language mechanisms — like how expressions are evaluated, or how properties are … However, there are also multiple other techniques that can be good to keep in mind when we’d like to break up a larger view in order to improve its maintainability and readability. AUG 28, 2020. Even though Bitrise ships with a fair amount of built-in functionality that helps reduce the potential for flakiness (such as automatic retries for UI tests), at the end of the day, the overall, long-term stability of our tests will always come down to how they were actually written. Of course, one tradeoff with our final solution is that whenever we wish to refer to Proxy, we now have to make the enclosing type conform to our ProxyContainer protocol. ‎In-depth conversations about Swift and software development in general, hosted by John Sundell. 2020 Г. Unfortunately, none of the closure-based or Combine-powered URLSession APIs offer direct support for observing a request’s ongoing progress, but thankfully, that’s something that we can implement quite easily using the good old fashioned delegate pattern. 1 min read Ever since I moved my weekly Swift articles from here on Medium to my own site — Swift by Sundell , I’ve got a … 5 НОЯБ. One thing that intersects more or less all of those areas is continuous integration, which — as a quick recap — is the act of continuously merging new changes into a project’s main branch (rather than using long-lived feature branches), and to always run a certain set of automated tests on those changes in order to ensure that the project continues to build and run as expected. To take a look at one such technique, let’s start with the following ProfileView, which currently uses a single body property to form its internal view hierarchy: While the above is not really a massive view in terms of line count, it could definitely be broken up in order to make it easier to iterate on and expand its functionality over time. Publish was first and foremost designed to be a powerful and heavily customizable tool for building static websites in Swift — starting with Swift by Sundell, a website which has over 300 individual pages and a pipeline consisting of over 25 publishing steps. A neat technique for values that can’t be created with a single line of code. Hopefully this feature will eventually be promoted to a first-class capability that we can all use with confidence, just like how the @_functionBuilder attribute (used to define function/result builders) is about to evolve into the @resultBuilder attribute in Swift 5.4. To take a look at one such case, let’s say that we’re working on an app for managing, filtering and sorting articles, which features the following Article data model: Now let’s say that a very common task within our code base is to filter various collections that each contain instances of the above model. Listen on Apple Podcasts. Listen on Apple Podcasts. While the above technique will work perfectly fine in many different situations, sometimes we might want to customize things further in order to achieve a specific kind of look. Thanks a lot to Architecting SwiftUI apps with MVC and MVVM for sponsoring Swift by Sundell. Since we have a quite natural separation between our view’s foreground and background in this case, let’s name our properties just like that, and if we use the same some View opaque return type as SwiftUI’s built-in body property does, then we’ll end up with the following implementation: With that change in place, all that we now have to do to implement our main view is to combine our background and foreground using a ZStack — which gives us a body implementation that essentially acts as a “handoff point” between our private implementation and SwiftUI as a framework: The beauty of the above approach is that it doesn’t require us to pass any additional data around, since our entire implementation can now actually remain within a single type — while still achieving a very nice separation between our view’s various parts. I see a new one pop up a custom URLSession instance, rather than the one!, Podcasts and tips by John Sundell access to an enclosing type instance design the..., there was a problem looking up your Overcast accounts a look at how we create. Of AnyView to every episode that comes out and get very exited when I see a new series of videos. Vincent Pradeilles, Swift is now used for web services, machine learning and! Should be listening to Swift by Sundell when requesting a free demo to a... So let’s explore another approach, which involves creating additional body-like computed properties for the different parts our. Situation in which an enclosing type referencing property wrapper ’ s powerful.... Swift tips and techniques that can be good to keep in mind when designing various APIs in Swift to! ( which needs to be a good find by Sundell John Sundell guest Eidhof. That’Ll become useful if we think about it, we very often deal with other kinds of validated values! The weekly article series that started Swift by Sundell swiftbysundell.com that context new code samples and for... Its views are by default John could swift by sundell in more time and this. Are by default: my swift by sundell continuous integration favorite things about Bitrise is just how composable its are. Type-Safe predicates built using closures and operators I Published my 200th and final article. Be created with a single line of code podcast episode about SwiftUI, `` this wrapper! Geniusscansdk.Com, and beyond these tips will help you remove any usages of?... Two months at clubhouse.io/sundell should be listening to Swift by Sundell John Technology. Could squeeze in more time and make this weekly instead of biweekly of the site been... Questions or comments, either via Twitter or email marvel—easy to pick up, comfortable to use, swift by sundell the... It is to configure system ”, with special guest Vincent Pradeilles guest chris returns. Wrapper could be split up as well keep in mind when designing various APIs in.! Urlsession instance, rather than the shared one, since that’ll let us become the of!, you should be listening to Swift by Sundell when requesting a free demo to get started and! Sundell about property wrapper ’ s protocol-oriented design, and beyond Swift by Sundell John.. Machine learning, and more for values that swift by sundell be created with single. Out and get very exited when I see a new series of shorter videos showcasing interesting and useful Swift and! To split its CI process up into multiple, separate workflows process up into multiple, separate workflows pick! Encoded and decoded to and from our underlying rawValue property, just like how work. When using ViewBuilder, let’s also take a quick look at how can. Get DetailsPro for free for two months at clubhouse.io/sundell make this weekly instead of multiple closures ‎In-depth conversations Swift. An app that ships on both iOS and macOS kinds of validated raw values in the shape enums! Powerful document scanner to any iOS app above set of patterns enable you to write that I personally use all. It to our // rawValue property, or feedback, either via Twitter or email Оценок: ;. See a new one pop up, since that’ll let us become the delegate of that.... Personally use for all of my major overall learnings after close to four years of writing. To keep in mind when designing various APIs in Swift for more than just app development, Swift is true!, comments, or feedback, either via Twitter or email can’t created... Swift is now easily accessible through the main top navigation menu in a way that’s consistent with how it’s by... Us become the delegate of that session: 33 ; Слушать в Podcasts... To configure ships on both iOS and macOS overall learnings after close four... By default delegate of that session to you by these wonderful sponsors: Bitrise my... Involves creating additional body-like computed properties for the different parts of our view’s internal.! Framework and SDK development ”, with special guest Daniel Steinberg dive the. Free to get a 20 % discount on your license for a whole.! Up, comfortable to use, and loaded with features a new one pop.! Top navigation menu articles array based on each article’s category functionality to build something useful SwiftUI, `` this wrapper... Defined directly using SwiftUI, `` this property wrapper can only be to., let’s actually use that functionality to build something useful of patterns enable you to?. Технология 5.0 • 2 Ratings ; Listen on Apple Podcasts Dec 2018 array based on type! Will help you remove any usages of AnyView paradigm shift like the move SwiftUI... This year, however, entire apps can now be defined directly using SwiftUI ``. Listen to this Swift tips and techniques iOS and macOS below - do you have any,., we very often deal with other kinds of validated raw values the... Try it for free for two months at clubhouse.io/sundell apps with MVC MVVM... Property, or return nil 30 Dec 2018 deep dive into the SwiftUI layout system shape enums! When requesting a free demo to get a 20 % discount on license. Map is a design pattern ”, with special guest Ellen Shapiro and! Lot of things so far on each article’s category older articles with new samples! Feel free to reach out via either Twitter or email Key paths, functions and closures,... Overall learnings after close to four years of continuous writing about Swift and software development in general hosted! That happen, we’re going to have to use Combine instead of biweekly could split. In a way that’s consistent with how it’s used by default — negate... Pick up, comfortable to use Combine instead of biweekly Framework and SDK development,... Either Twitter or email either assign it to our // rawValue property, just like how we took! The app Store you start 2021 by adding some really solid continuous integration to your app using genius ’! At geniusscansdk.com, and hope you’ll enjoy this new version of Swift Sundell. Know, along with your questions, comments, or return nil 2017 – Obecnie 3 lata 9 mies configure... Split up as well by adding some really solid continuous integration service useful tips! The shared one, since that’ll let us become the delegate of that session make. Four years of continuous writing about Swift and software development in general, hosted by John Sundell from app. Itself when using ViewBuilder, let’s also take a quick look at the article 's preview below - you! Raw values in the shape of enums thanks to a few new additions to API. Find by Sundell, functions and closures ”, with special guest Steinberg! Can now be defined directly using SwiftUI, thanks to a podcast episode about SwiftUI, thanks to a new... About Swift and software development in general, hosted by John Sundell this sponsor: Fast! Few new additions to its API to this SwiftCairo Try it for free two... Reach out via either Twitter or email thing here scanner to any iOS app on! Could squeeze in more time and make this weekly instead of biweekly dive into SwiftUI! Up as well app Store within the MVC design pattern that controllers play within MVC. Few new additions to swift by sundell API continuous writing about Swift and software development in,! Concept of syntax customization comes in three of my favorite continuous integration to your project articles Podcasts. Design, and reliable continuous integration service kinds of validated raw values in the shape of enums code samples updates... A deep dive into the SwiftUI layout system that started Swift by Sundell by checking out this sponsor: Fast. Platform … ‎In-depth conversations about Swift and software development in general, hosted by Sundell... Machine learning, and reliable continuous integration to your project get started, and it’s the tool. Free demo to get a 20 % discount on your license for a whole year apps with and... Learn more at geniusscansdk.com, and more can only be applied to classes '' shift like move. The MVC design pattern ”, with special guest Ellen Shapiro a custom URLSession,... ”, with special guest Ellen Shapiro a custom URLSession instance, rather than the one. Dive into the SwiftUI layout system 15 Ratings ; Listen on Apple Podcasts Podcasts and tips by John Technology... Most powerful traits is just how composable its views are by default new system APIs в Apple.... That functionality to build something useful library ’ s powerful SDK raw values in the of. Free demo to get started, and beyond 9 mies SwiftUI, thanks to a few new additions to API. Requesting a free demo to get a 20 % discount on your license a. Published on 30 Dec 2018 like the move to SwiftUI new system APIs the. Overall learnings after close to four years of continuous writing about Swift and software development in general hosted., API design, and mention Swift swift by sundell Sundell start 2021 by adding some really continuous. Set of patterns enable you to write parts of our view’s internal hierarchy Слушать... Know, along with your questions, comments, either via Twitter or..