Help
RSS
API
Feed
Maltego
Contact
Domain > combineswift.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2026-01-18
64.227.2.42
(
ClassC
)
Port 80
HTTP/1.1 200 OKCache-Control: max-age0, private, must-revalidateContent-Length: 40103Content-Type: text/html; charsetutf-8Etag: W/0c505a3c5223d180e2373e1222cf38b6Link: /assets/application-ea735f3d74bde9f59eeeb28cbc4d86430d790be0e8bbb0e094090ef0085a7c6b.css>; relpreload; asstyle; nopush,https://js.stripe.com/v3/>; relpreload; asscript; nopushReferrer-Policy: strict-origin-when-cross-originSet-Cookie: _jumpstart_app_sessionV41E%2BXMohzjdKL3sxpuawJ0A6nAon6HoudpJZruifEs4RSjErB7lRSAIpMuYommYI1pU9YC7hhU0laAQWmupBvu8jV%2FlmMGtl54QqGJOr5ltQrOtWL%2F8B8s6AxyHHTzaQ89UgcdGUQ%2B6sxI1HIUVHxrNN5zoGj0yDdQmCVPwmUTa%2FxsUAWdL%2Fk3dL45lWmZPlgNwmXYYJsyjkqrryZrFi9dkYOhxlb6dIJOasp%2FZo8snpY1Bp6EvQ7%2FHg6c2H6z7AjSUM%2B0N7AHZal3nvn8KAQ7NRjR%2BnB3bmFtQtzy6--rI26Ezm%2Fn2lURkhy--h63YGWrublz7kKNiQuY8rw%3D%3D; path/; HttpOnly; SameSiteLaxVary: Accept, OriginX-Content-Type-Options: nosniffX-Download-Options: noopenX-Frame-Options: SAMEORIGINX-Permitted-Cross-Domain-Policies: noneX-Request-Id: b333a28b-bf9e-4773-a5b5-559fde45bb76X-Runtime: 0.099106X-Xss-Protection: 0Date: Sun, 18 Jan 2026 01:37:00 GMT !DOCTYPE html>html classh-full antialiased langen> head> title> Combine Swift /title> meta namecsrf-param contentauthenticity_token />meta namecsrf-token contentDeBoiTsyF3KmxDBIv6xcqAM5rfQcrVTNkAWOo2dvAw2Icul_KA8wJKBRHnvT3q0iKlV1xlcv-2cTT-epTTQ3dg /> meta namedescription contentLearn Apples framework for functional reactive programming without breaking your brain. Combine Swift is a premium video course made by Ben Scheirman.> meta nameviewport contentwidthdevice-width, initial-scale1> link relstylesheet href/assets/application-ea735f3d74bde9f59eeeb28cbc4d86430d790be0e8bbb0e094090ef0085a7c6b.css mediaall data-turbo-trackreload /> script src/assets/application-0bdc5546c9316f00881631798895f6e973ed950f44bba9578d6fb29e28cadefa.js data-turbo-trackreload deferdefer>/script> meta nametheme-color content#ffffff>link relicon href/favicon.ico sizesany>!-- 32×32 -->link relicon href/icon.svg typeimage/svg+xml>link relapple-touch-icon href/apple-touch-icon.png>!-- 180×180 -->link relmanifest href/site.webmanifest>link relmask-icon href/safari-pinned-tab.svg color#727873>meta namemsapplication-TileColor content#2d89ef>meta nametheme-color content#ffffff> script srchttps://js.stripe.com/v3/>/script> script defer srchttps://kit.fontawesome.com/0e5ab6a736.js crossoriginanonymous>/script> link relpreload hrefhttps://fonts.googleapis.com/css2?familyInter:wght@400;500;600;700;800&displayswap asstyle onloadthis.onloadnull;this.relstylesheet> /head> body classh-full font-sans antialiased font-normal leading-normal bg-gray-50 dark:bg-gray-900 dark:text-gray-50 data-controllertheme data-theme-preference-value> div classmain flex flex-col> header> div idflash> nav classflex flex-wrap items-center justify-between px-4 py-2 bg-white dark:bg-gray-900 border-b border-gray-200 dark:border-gray-800 text-sm font-medium data-controllertoggle> div classflex items-center flex-shrink-0 mr-6> a classflex items-center text-gray-700 hover:text-gray-800 dark:text-gray-100 dark:hover:text-gray-300 href/> img width30 classmr-2 src/assets/combine-brick-icon-8ed309794d02319dc37a6a6a0cde03ec6f7aa79abde76784a2b85aba6031ea93.png /> svg xmlnshttp://www.w3.org/2000/svg xmlns:xlinkhttp://www.w3.org/1999/xlink width200px height25px viewBox0 0 200 25 version1.1 roleimg aria-labelledbyars2e87x17m8o7gnhse7s0flyjku32pb classfill-current>title idars2e87x17m8o7gnhse7s0flyjku32pb>Logo/title> g idPage-1 strokenone stroke-width1 fillnone fill-ruleevenodd> g idlogo fill#A68CE2 fill-rulenonzero> path dM11.9111111,24.1777778 C16.9777778,24.1777778 19.7777778,21.4777778 21.3777778,18.7111111 L17.3111111,16.7444444 C16.3777778,18.5777778 14.3777778,19.9777778 11.9111111,19.9777778 C8.0444444,19.9777778 5.1111111,16.8777778 5.1111111,12.6777778 C5.1111111,8.4777778 8.0444444,5.3777778 11.9111111,5.3777778 C14.3777778,5.3777778 16.3777778,6.8111111 17.3111111,8.6111111 L21.3777778,6.6111111 C19.8111111,3.8444444 16.9777778,1.1777778 11.9111111,1.1777778 C5.4111111,1.1777778 0.2444444,5.8444444 0.2444444,12.6777778 C0.2444444,19.5111111 5.4111111,24.1777778 11.9111111,24.1777778 Z M29.9111111,24.1777778 C35.2444444,24.1777778 38.4444444,20.3111111 38.4444444,15.7111111 C38.4444444,11.1444444 35.2444444,7.2777778 29.9111111,7.2777778 C24.6111111,7.2777778 21.4111111,11.1444444 21.4111111,15.7111111 C21.4111111,20.3111111 24.6111111,24.1777778 29.9111111,24.1777778 Z M29.9111111,20.4111111 C27.2777778,20.4111111 25.8111111,18.2444444 25.8111111,15.7111111 C25.8111111,13.2111111 27.2777778,11.0444444 29.9111111,11.0444444 C32.5444444,11.0444444 34.0444444,13.2111111 34.0444444,15.7111111 C34.0444444,18.2444444 32.5444444,20.4111111 29.9111111,20.4111111 Z M44.1444444,23.7777778 L44.1444444,12.9444444 C44.7777778,12.0444444 46.0111111,11.0444444 47.4777778,11.0444444 C49.2111111,11.0444444 49.8777778,12.1111111 49.8777778,13.6111111 L49.8777778,23.7777778 L54.1444444,23.7777778 L54.1444444,12.9111111 C54.7444444,12.0444444 55.9777778,11.0444444 57.4777778,11.0444444 C59.2111111,11.0444444 59.8777778,12.1111111 59.8777778,13.6111111 L59.8777778,23.7777778 L64.1444444,23.7777778 L64.1444444,12.1444444 C64.1444444,8.8444444 62.3777778,7.2777778 59.4111111,7.2777778 C56.9444444,7.2777778 54.8111111,8.7444444 53.8777778,10.2111111 C53.2777778,8.3777778 51.7777778,7.2777778 49.4111111,7.2777778 C46.9444444,7.2777778 44.8111111,8.8111111 44.1444444,9.7777778 L44.1444444,7.6777778 L39.9111111,7.6777778 L39.9111111,23.7777778 L44.1444444,23.7777778 Z M75.844444,24.1777778 C79.911111,24.1777778 82.977778,21.1111111 82.977778,15.7444444 C82.977778,10.4777778 79.944444,7.2777778 75.844444,7.2777778 C73.944444,7.2777778 72.1444444,8.1111111 70.877778,9.7444444 L70.877778,1.5444444 L66.6444444,1.5444444 L66.6444444,23.7777778 L70.877778,23.7777778 L70.877778,21.7444444 C72.1444444,23.3111111 73.911111,24.1777778 75.844444,24.1777778 Z M74.511111,20.4111111 C73.144444,20.4111111 71.577778,19.6444444 70.877778,18.6111111 L70.877778,12.9111111 C71.577778,11.8444444 73.144444,11.0444444 74.511111,11.0444444 C76.977778,11.0444444 78.611111,12.9444444 78.611111,15.7444444 C78.611111,18.5444444 76.977778,20.4111111 74.511111,20.4111111 Z M86.611111,5.3111111 C88.011111,5.3111111 89.144444,4.1777778 89.144444,2.7777778 C89.144444,1.3777778 88.011111,0.24444444 86.611111,0.24444444 C85.244444,0.24444444 84.077778,1.3777778 84.077778,2.7777778 C84.077778,4.1777778 85.244444,5.3111111 86.611111,5.3111111 Z M88.744444,23.7777778 L88.744444,7.6777778 L84.511111,7.6777778 L84.511111,23.7777778 L88.744444,23.7777778 Z M95.511111,23.7777778 L95.511111,12.9444444 C96.211111,11.9777778 97.511111,11.0444444 99.177778,11.0444444 C100.977778,11.0444444 102.144444,11.8111111 102.144444,14.0444444 L102.144444,23.7777778 L106.377778,23.7777778 L106.377778,12.4111111 C106.377778,9.2777778 104.677778,7.2777778 101.144444,7.2777778 C98.511111,7.2777778 96.544444,8.5444444 95.511111,9.7777778 L95.511111,7.6777778 L91.277778,7.6777778 L91.277778,23.7777778 L95.511111,23.7777778 Z M116.477778,24.1777778 C118.977778,24.1777778 121.477778,23.4444444 123.111111,21.9444444 L121.244444,19.2111111 C120.211111,20.2111111 118.444444,20.8111111 116.944444,20.8111111 C114.211111,20.8111111 112.577778,19.1111111 112.311111,17.0777778 L124.277778,17.0777778 L124.277778,16.1444444 C124.277778,10.8777778 121.011111,7.2777778 116.211111,7.2777778 C111.311111,7.2777778 107.877778,11.0444444 107.877778,15.7111111 C107.877778,20.8777778 111.577778,24.1777778 116.477778,24.1777778 Z M120.177778,14.2111111 L112.244444,14.2111111 C112.444444,12.6111111 113.577778,10.6444444 116.211111,10.6444444 C119.011111,10.6444444 120.077778,12.6777778 120.177778,14.2111111 Z M140.544444,24.1777778 C146.544444,24.1777778 149.444444,21.1111111 149.444444,17.0444444 C149.444444,12.1111111 144.777778,11.0111111 141.111111,10.1777778 C138.544444,9.5777778 136.677778,9.1111111 136.677778,7.6111111 C136.677778,6.2777778 137.811111,5.3444444 139.944444,5.3444444 C142.111111,5.3444444 144.511111,6.1111111 146.311111,7.7777778 L148.944444,4.3111111 C146.744444,2.2777778 143.811111,1.2111111 140.277778,1.2111111 C135.044444,1.2111111 131.844444,4.2111111 131.844444,7.9111111 C131.844444,12.8777778 136.511111,13.8777778 140.144444,14.7111111 C142.711111,15.3111111 144.644444,15.8777778 144.644444,17.5444444 C144.644444,18.8111111 143.377778,20.0444444 140.777778,20.0444444 C137.711111,20.0444444 135.277778,18.6777778 133.711111,17.0444444 L131.111111,20.6444444 C133.211111,22.7444444 136.277778,24.1777778 140.544444,24.1777778 Z M158.077778,23.7777778 L161.477778,12.8111111 L164.877778,23.7777778 L169.377778,23.7777778 L174.277778,7.6777778 L169.877778,7.6777778 L166.877778,18.5111111 L163.344444,7.6777778 L159.577778,7.6777778 L156.044444,18.5111111 L153.044444,7.6777778 L148.644444,7.6777778 L153.544444,23.7777778 L158.077778,23.7777778 Z M176.811111,5.3111111 C178.211111,5.3111111 179.344444,4.1777778 179.344444,2.7777778 C179.344444,1.3777778 178.211111,0.24444444 176.811111,0.24444444 C175.444444,0.24444444 174.277778,1.3777778 174.277778,2.7777778 C174.277778,4.1777778 175.444444,5.3111111 176.811111,5.3111111 Z M178.944444,23.7777778 L178.944444,7.6777778 L174.711111,7.6777778 L174.711111,23.7777778 L178.944444,23.7777778 Z M186.677778,23.7777778 L186.677778,11.3777778 L189.944444,11.3777778 L189.944444,7.6777778 L186.677778,7.6777778 L186.677778,6.8777778 C186.677778,5.3444444 187.477778,4.5444444 188.677778,4.5444444 C189.177778,4.5444444 189.677778,4.6444444 190.044444,4.8777778 L190.911111,1.8777778 C190.144444,1.4777778 189.044444,1.2111111 187.844444,1.2111111 C184.677778,1.2111111 182.411111,3.3111111 182.411111,6.8111111 L182.411111,7.6777778 L179.744444,7.6777778 L179.744444,11.3777778 L182.411111,11.3777778 L182.411111,23.7777778 L186.677778,23.7777778 Z M196.111111,24.1777778 C197.877778,24.1777778 199.011111,23.7111111 199.644444,23.1444444 L198.744444,19.9444444 C198.511111,20.1777778 197.911111,20.4111111 197.277778,20.4111111 C196.344444,20.4111111 195.811111,19.6444444 195.811111,18.6444444 L195.811111,11.3777778 L199.077778,11.3777778 L199.077778,7.6777778 L195.811111,7.6777778 L195.811111,3.2777778 L191.544444,3.2777778 L191.544444,7.6777778 L188.877778,7.6777778 L188.877778,11.3777778 L191.544444,11.3777778 L191.544444,19.7777778 C191.544444,22.6444444 193.144444,24.1777778 196.111111,24.1777778 Z idShape>/path> /g> /g>/svg> span classsr-only>Combine Swift/span>/a> /div> div classblock lg:hidden> button typebutton idsidebar-open classflex items-center p-3 text-gray-500 lg:hidden focus:outline-none focus:text-gray-700 data-actionclick->toggle#toggle touch->toggle#toggle> svg classw-5 h-5 fill-current viewBox0 0 20 20>title>Menu/title>path dM0 3h20v2H0V3zm0 6h20v2H0V9zm0 6h20v2H0v-2z>/path>/svg> /button> /div> div classflex-grow hidden w-full pb-6 lg:flex lg:w-auto lg:pb-0 data-toggle-targettoggleable> div classlg:flex-grow> /div> div> a classnav-link unread-announcements href/announcements>span>What's New/span>/a> a classnav-link href/users/sign_in>Log In/a> /div> /div>/nav> /header> main classpx-3 lg:px-0 h-full> div classrelative px-4 sm:px-8 bg-gray-50 dark:bg-gray-900 overflow-hidden> main classmt-10 mx-auto max-w-screen-xl px-4 sm:mt-12 md:mt-16 lg:mt-20 xl:mt-28> div classtext-center> h2 classtext-4xl tracking-tight leading-10 font-extrabold text-gray-900 dark:text-gray-50 sm:leading-none sm:text-6xl> a Combine Course for br> span classtext-purple-600> mere mortals /span> /h2> p classmt-6 max-w-md mx-auto text-base text-gray-500 sm:text-lg md:text-xl md:max-w-3xl> Learn Apples Combine Framework for functional reactive programming em>without/em> breaking your brain. /p> div classmt-6 max-w-md mx-auto sm:flex sm:justify-center md:mt-8> div classrounded-md shadow> a href/courses/1-combine-swift/pricing classw-full flex items-center justify-center px-6 py-3 border border-transparent text-lg leading-6 font-medium rounded-md text-white bg-primary-500 focus:outline-none focus:border-green-700 focus:shadow-outline-green hover:bg-primary-600 hover:text-white transition duration-150 ease-in-out md:py-4 md:text-lg md:px-10> Get the Course svg xmlnshttp://www.w3.org/2000/svg viewBox0 0 20 20 roleimg aria-labelledbyashqlz8sg31lxxfwgzkml8an3nzdtq1z classfill-current text-white w-5 h-5 ml-3>title idashqlz8sg31lxxfwgzkml8an3nzdtq1z>Icons/cheveron right/title>path dM12.95 10.707l.707-.707L8 4.343 6.586 5.757 10.828 10l-4.242 4.243L8 15.657l4.95-4.95z>/path>/svg> /a> /div> /div> /div> /main> /div> div classmt-8 mb-8> div classmx-auto max-w-screen-sm border-secondary-200 bg-secondary-100 dark:bg-secondary-800 dark:border-secondary-900 text-secondary-700 dark:text-secondary-200 border-4 rounded-lg p-4> h2 classtext-2xl tracking tight leading-10 font-bold texsm:text:xl sm:leading-none md:text-3xl>Combine? Whats That?/h2> p classmy-4>Combine is Apples new framework for Functional Reactive Programming. Its essentially a first party, supported implementation of RxSwift and it will change how you write asynchronous code./p> /div> /div> div classmb-8 mt-16 rotated bg-primary-900 border-t-4 border-b-4 border-primary-200 dark:border-primary-800> div classmx-auto max-w-screen-md px-8 py-16> h2 classtext-3xl tracking-tight leading-10 font-extrabold text-gray-100 sm:text-3xl sm:leading-none md:text-4xl> Combine is hard. But its also strong classitalic text-primary-300>AWESOME/strong>. /h2> p classmy-8 text-gray-200 text-xl> If youve struggled to understand Functional Reactive Programming, strong classtext-xl text-primary-300>youre not alone/strong>. It can be difficult to understand at first. /p> p classmy-8 text-gray-200 text-xl> Ill be honest, Ive been critical of Combines learning curve in the past. But once I started to grok it, it changed how I approached problems, and allowed me to write more expressive, robust asynchronous code that Im strong classtext-xl text-primary-300>more confident/strong> in. /p> p classmy-8 text-gray-200 text-xl> Im here to help get you through the initial learning curve to help you understand and be productive with Combine. /p> /div> /div> div classm-8 mt-16 mx-auto max-w-screen-md> h2 classtext-3xl tracking-tight leading-10 font-extrabold text-gray-900 dark:text-gray-50 sm:text-xl sm:leading-none md:text-3xl> Why did I make this course? /h2> p classmy-8 text-gray-800 dark:text-gray-100 text-lg> Ive always liked the em>idea/em> of Functional Reactive Programming. Software is complex and sometimes we need tools to make the complex easier. But in practice, tools like RxSwift, ReactiveCocoa, and Combine have been strong>notoriously/strong> dense and hard to learn. /p> p classmy-8 text-gray-800 dark:text-gray-100 text-xl font-medium> span classbg-primary-100 py-1 px-3 text-primary-700 italic> So I decided to make the course that I wish I had when I was learning. /span> /p> p classmy-8 text-gray-800 dark:text-gray-100 text-lg> In this course I break down the concepts so that they are actually understandable and useful. I do this by showing the theory, then putting it into practice with live examples. /p> /div> div classmb-8 mt-16 rotated bg-teal-600> div classmx-auto max-w-screen-md px-8 py-16> h2 classtext-3xl tracking-tight leading-10 font-extrabold text-gray-100 sm:text-xl sm:leading-none md:text-3xl> What Combine span classfont-extrabold text-teal-200 underline--magical>Superpowers/span> does this course unlock? /h2> p classmy-8 text-gray-100 text-lg> After taking this course, youll: /p> ul> li classfont-semibold text-teal-100 text-xl leading-8>Understand Combine code without requiring a PhD in functional reactive programming/li> li classfont-semibold text-teal-100 text-xl leading-8>Simplify your networking stack/li> li classfont-semibold text-teal-100 text-xl leading-8>Provide robust validation to your forms/li> li classfont-semibold text-teal-100 text-xl leading-8>See how Combine fits in with your app architecture/li> li classfont-semibold text-teal-100 text-xl leading-8>See how to reuse and repurpose asynchronous data across screens/li> li classfont-semibold text-teal-100 text-xl leading-8>Write a complete weather app using Combine/li> li classfont-semibold text-teal-100 text-xl leading-8>Write your own custom publishers and operators to make your code powerful em>and/em> expressive/li> /ul> /div> /div> div classbg-gray-50 dark:bg-gray-900 pt-12 sm:pt-16> div classmax-w-screen-md mx-auto px-4 sm:px-6 lg:px-8> h3 classtext-xl font-medium text-gray-400 italic>Dont just take my word for it.../h3> section classpy-10 bg-gray-50 dark:bg-gray-900 overflow-hidden md:py-10 relative> div classabsolute left-0 md:left-10 top-10 right-0 md:right-10 bottom-0 bg-yellow-100 shadow-sm rounded-md transform md:skew-x-2>/div> div classrelative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8> div classrelative> blockquote classmt-10 px-12> div classmax-w-3xl mx-auto text-center text-2xl leading-9 font-medium text-yellow-900> p> “ I had started working with SwiftUI, but not wrapped my head around how Combine works and what it had to offer on my apps. Combine Swift was just what I needed to get over that hurdle, with clear, concise explanations of basic concepts, and well as practical code examples. ” /p> /div> footer classmt-8> div classmd:flex md:items-center md:justify-center> div classmd:flex-shrink-0> img classmx-auto h-16 w-16 rounded-full srchttp://combineswift.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBY3c9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--38eddd8deeb89ace14ffe9defdca4e6096a91e83/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFHQWFRR0EiLCJleHAiOm51bGwsInB1ciI6InZhcmlhdGlvbiJ9fQ--81266652061fba308cb9191308208e9f2d5f50b1/t8hpFYGa_400x400.jpg /> /div> div classmt-3 text-center md:mt-0 md:ml-4 md:flex md:items-center> div classtext-base font-medium text-gray-900>Greg Pierce/div> svg classhidden md:block mx-1 h-5 w-5 text-indigo-600 fillcurrentColor viewBox0 0 20 20> path dM11 0h3L9 20H6l5-20z /> /svg> div classtext-base font-medium text-gray-500>Drafts/div> /div> /div> /footer> /blockquote> /div> /div> /section> section classpy-10 bg-gray-50 dark:bg-gray-900 overflow-hidden md:py-10 relative> div classabsolute left-0 md:left-10 top-10 right-0 md:right-10 bottom-0 bg-yellow-100 shadow-sm rounded-md transform md:skew-x-2>/div> div classrelative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8> div classrelative> blockquote classmt-10 px-12> div classmax-w-3xl mx-auto text-center text-2xl leading-9 font-medium text-yellow-900> p> “ If you're having trouble getting a handle on Combine, best money you'll ever spend. It's connecting a lot of the dots for me. ” /p> /div> footer classmt-8> div classmd:flex md:items-center md:justify-center> div classmd:flex-shrink-0> img classmx-auto h-16 w-16 rounded-full srchttp://combineswift.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBYzA9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--a9bfe9c1b3798d64879d357ab78033be2883c998/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lKYW5CbFp3WTZCa1ZVT2hSeVpYTnBlbVZmZEc5ZmJHbHRhWFJiQjJrQmdHa0JnQT09IiwiZXhwIjpudWxsLCJwdXIiOiJ2YXJpYXRpb24ifX0--90f8235f374708ed7369fd0dfd020eb712b4cc84/image.jpeg /> /div> div classmt-3 text-center md:mt-0 md:ml-4 md:flex md:items-center> div classtext-base font-medium text-gray-900>Michael Prenez-Isbell/div> /div> /div> /footer> /blockquote> /div> /div> /section> section classpy-10 bg-gray-50 dark:bg-gray-900 overflow-hidden md:py-10 relative> div classabsolute left-0 md:left-10 top-10 right-0 md:right-10 bottom-0 bg-yellow-100 shadow-sm rounded-md transform md:skew-x-2>/div> div classrelative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8> div classrelative> blockquote classmt-10 px-12> div classmax-w-3xl mx-auto text-center text-2xl leading-9 font-medium text-yellow-900> p> “ Excellent, kinda mind-blowing, class! A fantastic walkthrough of not just what Combine is, but why and how you want to use it. I can’t wait to rewrite a bunch of my old code, to put all this new knowledge to use! ” /p> /div> footer classmt-8> div classmd:flex md:items-center md:justify-center> div classmd:flex-shrink-0> img classmx-auto h-16 w-16 rounded-full srchttp://combineswift.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBYzQ9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--e6cd2a89d1f62061abf8d296b8056587472a2e96/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFHQWFRR0EiLCJleHAiOm51bGwsInB1ciI6InZhcmlhdGlvbiJ9fQ--81266652061fba308cb9191308208e9f2d5f50b1/MMxX_3gA_400x400.jpg /> /div> div classmt-3 text-center md:mt-0 md:ml-4 md:flex md:items-center> div classtext-base font-medium text-gray-900>Kyle Davis/div> svg classhidden md:block mx-1 h-5 w-5 text-indigo-600 fillcurrentColor viewBox0 0 20 20> path dM11 0h3L9 20H6l5-20z /> /svg> div classtext-base font-medium text-gray-500>EOG Resources/div> /div> /div> /footer> /blockquote> /div> /div> /section> section classpy-10 bg-gray-50 dark:bg-gray-900 overflow-hidden md:py-10 relative> div classabsolute left-0 md:left-10 top-10 right-0 md:right-10 bottom-0 bg-yellow-100 shadow-sm rounded-md transform md:skew-x-2>/div> div classrelative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8> div classrelative> blockquote classmt-10 px-12> div classmax-w-3xl mx-auto text-center text-2xl leading-9 font-medium text-yellow-900> p> “ As you'd expect from the creator of NSScreencast, the video lessons are fantastic. Clear explanations with screencast style demonstrations as you go. It's good. ” /p> /div> footer classmt-8> div classmd:flex md:items-center md:justify-center> div classmd:flex-shrink-0> img classmx-auto h-16 w-16 rounded-full srchttp://combineswift.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZEE9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--e4a7178ec02bb055f67a2135a41112f3a249f1a0/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJY0c1bkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFHQWFRR0EiLCJleHAiOm51bGwsInB1ciI6InZhcmlhdGlvbiJ9fQ--0c70bf29bc14e9843c12d2c1f8b4d124978cde99/image.png /> /div> div classmt-3 text-center md:mt-0 md:ml-4 md:flex md:items-center> div classtext-base font-medium text-gray-900>Dave Verwer/div> svg classhidden md:block mx-1 h-5 w-5 text-indigo-600 fillcurrentColor viewBox0 0 20 20> path dM11 0h3L9 20H6l5-20z /> /svg> div classtext-base font-medium text-gray-500>iOS Dev Weekly/div> /div> /div> /footer> /blockquote> /div> /div> /section> /div> /div> div classbg-gray-50 dark:bg-gray-900 pt-12 sm:pt-16> div classmax-w-screen-md mx-auto px-4 sm:px-6 lg:px-8> div classmax-w-4xl mx-auto text-center> h2 classtext-3xl leading-9 font-extrabold text-gray-900 dark:text-gray-100 sm:text-4xl sm:leading-10> Up to date with latest Xcode and Swift /h2> p classmt-3 text-xl leading-7 text-gray-500 sm:mt-4> This course requires at least Xcode 12, iOS 14 / macOS Big Sur, and Swift 5.3. While much has changed about iOS and Swift, Combine has stayed relatively unchanged. /p> p classmt-3 text-xl leading-7 text-gray-500 sm:mt-4> Download before & after sample code to follow along and check your work. /p> /div> /div> div classmt-10 pb-12 sm:pb-16> div classrelative> div classabsolute inset-0 h-1/2 bg-gray-50 dark:bg-gray-900>/div> div classrelative max-w-screen-xl mx-auto px-4 sm:px-6 lg:px-8> div classmax-w-4xl mx-auto> dl classrounded-lg bg-white dark:bg-gray-200 shadow-lg sm:grid sm:grid-cols-3> div classflex flex-col border-b border-gray-100 p-6 text-center sm:border-0 sm:border-r> dt classorder-2 mt-2 text-lg leading-6 font-medium text-gray-500 idstat-video> of Video /dt> dd classorder-1 text-5xl leading-none font-extrabold text-primary-600 aria-describedbystat-video> 12 hours /dd> /div> div classflex flex-col border-t border-b border-gray-100 p-6 text-center sm:border-0 sm:border-l sm:border-r> dt classorder-2 mt-2 text-lg leading-6 font-medium text-gray-500 idstat-modules> Modules /dt> dd classorder-1 text-5xl leading-none font-extrabold text-primary-600 aria-describedbystat-modules> 11 /dd> /div> div classflex flex-col border-t border-gray-100 p-6 text-center sm:border-0 sm:border-l> dt classorder-2 mt-2 text-lg leading-6 font-medium text-gray-500 idstat-swift> Swift /dt> dd classorder-1 text-5xl leading-none font-extrabold text-primary-600 aria-describedbystat-swift> 100% /dd> /div> /dl> /div> /div> /div> /div> /div> div classm-8 mt-16 mx-auto max-w-screen-md> h2 classtext-3xl tracking-tight leading-10 font-extrabold text-gray-900 dark:text-gray-100 sm:text-xl sm:leading-none md:text-3xl> Whats in the course? /h2> p classmy-8 text-secondary-800 dark:text-secondary-300 text-lg> This course is organized into modules. Each module contains multiple videos that build upon knowledge gained in previous modules. /p> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 1: Introduction & Theory/h3> ul classmy-2> li>What is Combine?/li> li>Why Should You Learn It?/li> li>About This Course/li> li>What is FRP?/li> li>Thinking in Streams/li> li>Marble Diagrams/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 2: Combine Basics/h3> ul classmy-2> li>Publishers/li> li>Subscribers/li> li>Cancellation/li> li>Subjects/li> li>Basic Operators/li> li>Accumulating Operators/li> li>Working with Multiple Streams/li> li>flatMap and switchToLatest/li> li>Type Erasure and AnyPublisher/li> li>@Published Property Wrapper/li> li>Example App: Sign Up Form Validation/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 3: Error Handling/h3> ul classmy-2> li>Catching Errors/li> li>Throwing Errors From Operators/li> li>Changing the Failure Type/li> li>Example App: Dice Rolling/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 4: Networking/h3> ul classmy-2> li>Data Task Publisher/li> li>Decoding JSON Responses/li> li>Retrying Failed Requests/li> li>Reusable Networking Helpers/li> li>Sharing Results with Multiple Subscribers/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 5: Schedulers and Threading/h3> ul classmy-2> li>What are Schedulers?/li> li>subscribe(on:)/li> li>receive(on:)/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 6: More Publishers/h3> ul classmy-2> li>KVOPublisher/li> li>Future and Deferred/li> li>NotificationCenterPublisher/li> li>Record Publisher/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 7: App Architecture/h3> ul classmy-2> li>How Combine Fits With Your App/li> li>View Models and MVVM/li> li>Example App: Sign Up Form Validation with ViewModels/li> li>Combine and Swift UI Example App: Swift Issues/li> li>Centralizing Access to Data with ObservableObject/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 8: Build a Complete Weather App with Combine/h3> ul classmy-2> li>Project Overview/li> li>Getting an API Key / Project Tour/li> li>Autocompleting and Geocoding Cities/li> li>Saving and Loading Cities/li> li>Fetching Weather/li> li>Introduce a Weather Manager/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 9: Advanced Combine/h3> ul classmy-2> li>Custom Publishers/li> li>Create a custom publisher for the Photos Framework/li> li>UIControl Publisher/li> li>Custom Operators/li> li>Creating the Amb Operator/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 10: Testing Combine Publishers/h3> ul classmy-2> li>Basic Testing Techniques/li> li>Testing Timing/li> li>Testing Application Code - SignUpViewModel/li> li>Weather App Testing - Isolating Dependencies/li> li>Weather App Testing - Isolating and Testing the Geocoder/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 11: Debugging Pipelines/h3> ul classmy-2> li>Debugging with operators/li> li>Visualizing Pipelines with Timelane/li> li>Conclusion/li> /ul> /div> /div> !-- whats in the course --> div classm-8 mt-16 mx-auto max-w-screen-lg bg-gray-800 shadow-md rounded-md px-8 py-8> div classmax-w-screen-md mx-auto> h2 classtext-xl tracking-tight leading-10 font-extrabold text-gray-200 sm:leading-none> Meet Your Instructor /h2> div classflex items-center space-x-4 max-w-3xl my-4> img classw-16 h-16 rounded-full sm:w-32 sm:h-32 border-secondary-300 border altBen Scheirman srchttps://benpublic.s3.us-east-1.amazonaws.com/biophoto/ben17-sq.jpg width126 height126> div classmy-6 text-gray-100 text-lg font-medium> Hi there, Im Ben Scheirman. Ive been a software developer for nearly two decades and I love to share what Ive learned with others. Ive been teaching developers with videos since 2012. /div> /div> p classmb-4 text-secondary-200 text-lg font-normal> Questions? You can reach Ben on a classp-1 text-white underline hover:bg-white hover:text-gray-800 hover:no-underline hrefhttps://mastodon.xyz/@bens>Mastodon/a>. /p> /div> /div> div classmy-16 rotated bg-teal-100 border-t-4 border-b-4 border-teal-200> div classmx-auto max-w-screen-md px-8 py-16 text-center> h2 classtext-3xl tracking-tight leading-10 font-extrabold text-gray-700 sm:text-xl sm:leading-none md:text-3xl> Ready to level up with span classfont-extrabold text-teal-600 underline--magical>Combine/span>? /h2> div classmt-6 max-w-md mx-auto sm:flex sm:justify-center md:mt-8> div classrounded-md shadow> a href/courses/1-combine-swift/pricing classw-full flex items-center justify-center px-6 py-3 border border-transparent text-lg leading-6 font-medium rounded-md text-white bg-teal-500 focus:outline-none focus:border-2 focus:bg-white focus:text-teal-600 hover:bg-teal-600 hover:text-white transition duration-150 ease-in-out md:py-4 md:text-lg md:px-10> Get the Course svg xmlnshttp://www.w3.org/2000/svg viewBox0 0 20 20 roleimg aria-labelledbya68htpgxq30bnvajisj4qr9te5r4mafm classfill-current text-white w-5 h-5 ml-3>title ida68htpgxq30bnvajisj4qr9te5r4mafm>Icons/cheveron right/title>path dM12.95 10.707l.707-.707L8 4.343 6.586 5.757 10.828 10l-4.242 4.243L8 15.657l4.95-4.95z>/path>/svg> /a> /div> /div> /div> /div> /div> /main> /div> footer classw-full h-auto px-2 py-4 text-sm lg:px-6> div classflex flex-col-reverse p-4 text-sm lg:flex-row lg:justify-between lg:p-0> div classflex items-center justify-center> a classhidden sm:inline-block href/> svg xmlnshttp://www.w3.org/2000/svg xmlns:xlinkhttp://www.w3.org/1999/xlink width32px height32px viewBox0 0 32 32 version1.1 roleimg aria-labelledbyalh8agmeqssyzfo5rs7ym85p8d7orzg classfill-current text-gray-700 hover:text-gray-800 dark:text-gray-50 dark:hover:text-gray-200>title idalh8agmeqssyzfo5rs7ym85p8d7orzg>Mark/title> defs> filter> feColorMatrix inSourceGraphic typematrix values0 0 0 0 0.445741 0 0 0 0 0.471014 0 0 0 0 0.449275 0 0 0 1.000000 0>/feColorMatrix> /filter> /defs> g idLogo strokenone stroke-width1 fillnone fill-ruleevenodd> g transformtranslate(-109.000000, -228.000000)> g transformtranslate(109.000000, 228.000000) filterurl(#filter-1)> g> path dM15.9996553,10.375 C17.0838014,9.02955003 18.3977861,7.88688283 19.8806612,7 C18.8881079,5.26456701 17.5704088,3.73670387 15.9996553,2.5 C14.4289017,3.73670387 13.1112026,5.26456701 12.1186493,7 C13.6015244,7.88688283 14.9155091,9.02955003 15.9996553,10.375 L15.9996553,10.375 Z M17.5070605,12.0625 C18.34487,12.7191657 19.1002945,13.4746378 19.756919,14.3125 C21.3189735,13.5326939 22.998895,13.0157624 24.7291063,12.7825 C24.3174712,11.0778907 23.5508202,9.47932274 22.4792478,8.09125 C20.5040307,8.95890606 18.7899602,10.3279218 17.5070605,12.0625 L17.5070605,12.0625 Z M27.2489478,14.875 C24.3097575,14.8315454 21.433218,15.7260872 19.0369643,17.42875 C18.3107529,15.9918257 17.2731089,14.7350444 15.9996553,13.75 C14.7280543,14.7415128 13.690951,16.0014805 12.9623463,17.44 C10.5660516,15.7361752 7.69034736,14.8379536 4.75017949,14.875 C4.73255317,17.7025789 6.01399933,20.3817578 8.2263941,22.1425 C10.112963,23.7286511 12.425685,24.7226754 14.874726,25 L14.874726,28.375 C14.874726,28.9963203 15.378374,29.5 15.9996553,29.5 C16.6209365,29.5 17.1245845,28.9963203 17.1245845,28.375 L17.1245845,25 C19.570954,24.739002 21.8867232,23.7649095 23.7841657,22.19875 C26.0121197,20.4268156 27.2919951,17.7214542 27.2489478,14.875 Z M14.4922501,12.0625 C13.2081567,10.3418398 11.4985111,8.98489292 9.53131204,8.125 C8.46115371,9.50974906 7.69456917,11.1043452 7.28145352,12.805 C9.01214503,13.0426087 10.6919667,13.5633101 12.2536408,14.34625 C12.9046748,13.4972015 13.6563777,12.7303408 14.4922501,12.0625 L14.4922501,12.0625 Z fill#000000 fill-rulenonzero>/path> /g> /g> /g> /g>/svg>/a> div classml-4 text-gray-700 dark:text-gray-50>© 2026 Fickle Bits, LLC/div> /div> ul classlist-none flex flex-wrap items-center justify-center> li>a classtext-gray-700 hover:text-gray-800 dark:text-gray-50 dark:hover:text-gray-200 no-underline block lg:my-0 my-2 px-4 href/privacy>Privacy Policy/a>/li> /ul> /div>/footer> ninja-keys data-controllercommand-palette hideBreadcrumbs>/ninja-keys> script typetext/javascript> var Countly Countly || {}; Countly.q Countly.q || ; Countly.app_key af896f7ad2c6a347f9137ac45f637e22cfebfcb1; Countly.url https://analytics.ficklebits.com; Countly.q.push(track_sessions); (function() { var cly document.createElement(script); cly.type text/javascript; cly.async true; cly.src https://cdnjs.cloudflare.com/ajax/libs/countly-sdk-web/20.4.0/countly.min.js; cly.onload function(){Countly.init()}; var s document.getElementsByTagName(script)0; s.parentNode.insertBefore(cly, s); })(); /script> noscript>img srchttps://analytics.ficklebits.com/pixel.png?app_keyaf896f7ad2c6a347f9137ac45f637e22cfebfcb1&begin_session1/>/noscript> /body>/html>
Port 443
HTTP/1.1 200 OKAlt-Svc: h3:443; ma2592000Cache-Control: max-age0, private, must-revalidateContent-Length: 40109Content-Type: text/html; charsetutf-8Etag: W/883a10d5d1f51977b3a6ade5d201632eLink: /assets/application-ea735f3d74bde9f59eeeb28cbc4d86430d790be0e8bbb0e094090ef0085a7c6b.css>; relpreload; asstyle; nopush,https://js.stripe.com/v3/>; relpreload; asscript; nopushReferrer-Policy: strict-origin-when-cross-originSet-Cookie: _jumpstart_app_sessionHUfpCPKs6%2B6uF5meYwtVQEtbH9vMh9wIee15Z7e3pnLw2lf8i5BVPKuvZ67vnawx0SkNR1cAe0wKf2SWhg893Qx7yDeEvSVTX2bGbUVt8xJ2G90ngw%2B4I%2BD0mZK5KOh1yQVkbwUlOkLe0X%2Bwa43HM2z%2BjO8DzoLAzZBm%2FmnOR0MuxiOzMLKDWUttrn02D7beCk2j36H26cX%2BI8zdTNZiaK5%2Bz47VK2p%2BVP2pWMdQN%2BU%2FfJGlys4QlyxGmP3XzMnqpjIpsuy9%2FtCQuyWFgKFW5fSmuryiDhZmrl1ysYeJ--MU7pHmgtl94ELfWt--Rf%2F7LGNm649VJJLJpPHliA%3D%3D; path/; HttpOnly; SameSiteLaxVary: Accept, OriginX-Content-Type-Options: nosniffX-Download-Options: noopenX-Frame-Options: SAMEORIGINX-Permitted-Cross-Domain-Policies: noneX-Request-Id: a11ddb1b-1fa9-4547-a7be-bb406cf80803X-Runtime: 0.155680X-Xss-Protection: 0Date: Sun, 18 Jan 2026 01:37:01 GMT !DOCTYPE html>html classh-full antialiased langen> head> title> Combine Swift /title> meta namecsrf-param contentauthenticity_token />meta namecsrf-token contentpYY1-DlsuGapWfyRu0XX6HZJBwly9lb0BO9y2o9dmaztNXPtqQ6ZXosh4xuZs6e3_Z7aLq5lZpWc-_J2r2kRXQ /> meta namedescription contentLearn Apples framework for functional reactive programming without breaking your brain. Combine Swift is a premium video course made by Ben Scheirman.> meta nameviewport contentwidthdevice-width, initial-scale1> link relstylesheet href/assets/application-ea735f3d74bde9f59eeeb28cbc4d86430d790be0e8bbb0e094090ef0085a7c6b.css mediaall data-turbo-trackreload /> script src/assets/application-0bdc5546c9316f00881631798895f6e973ed950f44bba9578d6fb29e28cadefa.js data-turbo-trackreload deferdefer>/script> meta nametheme-color content#ffffff>link relicon href/favicon.ico sizesany>!-- 32×32 -->link relicon href/icon.svg typeimage/svg+xml>link relapple-touch-icon href/apple-touch-icon.png>!-- 180×180 -->link relmanifest href/site.webmanifest>link relmask-icon href/safari-pinned-tab.svg color#727873>meta namemsapplication-TileColor content#2d89ef>meta nametheme-color content#ffffff> script srchttps://js.stripe.com/v3/>/script> script defer srchttps://kit.fontawesome.com/0e5ab6a736.js crossoriginanonymous>/script> link relpreload hrefhttps://fonts.googleapis.com/css2?familyInter:wght@400;500;600;700;800&displayswap asstyle onloadthis.onloadnull;this.relstylesheet> /head> body classh-full font-sans antialiased font-normal leading-normal bg-gray-50 dark:bg-gray-900 dark:text-gray-50 data-controllertheme data-theme-preference-value> div classmain flex flex-col> header> div idflash> nav classflex flex-wrap items-center justify-between px-4 py-2 bg-white dark:bg-gray-900 border-b border-gray-200 dark:border-gray-800 text-sm font-medium data-controllertoggle> div classflex items-center flex-shrink-0 mr-6> a classflex items-center text-gray-700 hover:text-gray-800 dark:text-gray-100 dark:hover:text-gray-300 href/> img width30 classmr-2 src/assets/combine-brick-icon-8ed309794d02319dc37a6a6a0cde03ec6f7aa79abde76784a2b85aba6031ea93.png /> svg xmlnshttp://www.w3.org/2000/svg xmlns:xlinkhttp://www.w3.org/1999/xlink width200px height25px viewBox0 0 200 25 version1.1 roleimg aria-labelledbya37w4dboc5kbz3msywteud19zz72twcb classfill-current>title ida37w4dboc5kbz3msywteud19zz72twcb>Logo/title> g idPage-1 strokenone stroke-width1 fillnone fill-ruleevenodd> g idlogo fill#A68CE2 fill-rulenonzero> path dM11.9111111,24.1777778 C16.9777778,24.1777778 19.7777778,21.4777778 21.3777778,18.7111111 L17.3111111,16.7444444 C16.3777778,18.5777778 14.3777778,19.9777778 11.9111111,19.9777778 C8.0444444,19.9777778 5.1111111,16.8777778 5.1111111,12.6777778 C5.1111111,8.4777778 8.0444444,5.3777778 11.9111111,5.3777778 C14.3777778,5.3777778 16.3777778,6.8111111 17.3111111,8.6111111 L21.3777778,6.6111111 C19.8111111,3.8444444 16.9777778,1.1777778 11.9111111,1.1777778 C5.4111111,1.1777778 0.2444444,5.8444444 0.2444444,12.6777778 C0.2444444,19.5111111 5.4111111,24.1777778 11.9111111,24.1777778 Z M29.9111111,24.1777778 C35.2444444,24.1777778 38.4444444,20.3111111 38.4444444,15.7111111 C38.4444444,11.1444444 35.2444444,7.2777778 29.9111111,7.2777778 C24.6111111,7.2777778 21.4111111,11.1444444 21.4111111,15.7111111 C21.4111111,20.3111111 24.6111111,24.1777778 29.9111111,24.1777778 Z M29.9111111,20.4111111 C27.2777778,20.4111111 25.8111111,18.2444444 25.8111111,15.7111111 C25.8111111,13.2111111 27.2777778,11.0444444 29.9111111,11.0444444 C32.5444444,11.0444444 34.0444444,13.2111111 34.0444444,15.7111111 C34.0444444,18.2444444 32.5444444,20.4111111 29.9111111,20.4111111 Z M44.1444444,23.7777778 L44.1444444,12.9444444 C44.7777778,12.0444444 46.0111111,11.0444444 47.4777778,11.0444444 C49.2111111,11.0444444 49.8777778,12.1111111 49.8777778,13.6111111 L49.8777778,23.7777778 L54.1444444,23.7777778 L54.1444444,12.9111111 C54.7444444,12.0444444 55.9777778,11.0444444 57.4777778,11.0444444 C59.2111111,11.0444444 59.8777778,12.1111111 59.8777778,13.6111111 L59.8777778,23.7777778 L64.1444444,23.7777778 L64.1444444,12.1444444 C64.1444444,8.8444444 62.3777778,7.2777778 59.4111111,7.2777778 C56.9444444,7.2777778 54.8111111,8.7444444 53.8777778,10.2111111 C53.2777778,8.3777778 51.7777778,7.2777778 49.4111111,7.2777778 C46.9444444,7.2777778 44.8111111,8.8111111 44.1444444,9.7777778 L44.1444444,7.6777778 L39.9111111,7.6777778 L39.9111111,23.7777778 L44.1444444,23.7777778 Z M75.844444,24.1777778 C79.911111,24.1777778 82.977778,21.1111111 82.977778,15.7444444 C82.977778,10.4777778 79.944444,7.2777778 75.844444,7.2777778 C73.944444,7.2777778 72.1444444,8.1111111 70.877778,9.7444444 L70.877778,1.5444444 L66.6444444,1.5444444 L66.6444444,23.7777778 L70.877778,23.7777778 L70.877778,21.7444444 C72.1444444,23.3111111 73.911111,24.1777778 75.844444,24.1777778 Z M74.511111,20.4111111 C73.144444,20.4111111 71.577778,19.6444444 70.877778,18.6111111 L70.877778,12.9111111 C71.577778,11.8444444 73.144444,11.0444444 74.511111,11.0444444 C76.977778,11.0444444 78.611111,12.9444444 78.611111,15.7444444 C78.611111,18.5444444 76.977778,20.4111111 74.511111,20.4111111 Z M86.611111,5.3111111 C88.011111,5.3111111 89.144444,4.1777778 89.144444,2.7777778 C89.144444,1.3777778 88.011111,0.24444444 86.611111,0.24444444 C85.244444,0.24444444 84.077778,1.3777778 84.077778,2.7777778 C84.077778,4.1777778 85.244444,5.3111111 86.611111,5.3111111 Z M88.744444,23.7777778 L88.744444,7.6777778 L84.511111,7.6777778 L84.511111,23.7777778 L88.744444,23.7777778 Z M95.511111,23.7777778 L95.511111,12.9444444 C96.211111,11.9777778 97.511111,11.0444444 99.177778,11.0444444 C100.977778,11.0444444 102.144444,11.8111111 102.144444,14.0444444 L102.144444,23.7777778 L106.377778,23.7777778 L106.377778,12.4111111 C106.377778,9.2777778 104.677778,7.2777778 101.144444,7.2777778 C98.511111,7.2777778 96.544444,8.5444444 95.511111,9.7777778 L95.511111,7.6777778 L91.277778,7.6777778 L91.277778,23.7777778 L95.511111,23.7777778 Z M116.477778,24.1777778 C118.977778,24.1777778 121.477778,23.4444444 123.111111,21.9444444 L121.244444,19.2111111 C120.211111,20.2111111 118.444444,20.8111111 116.944444,20.8111111 C114.211111,20.8111111 112.577778,19.1111111 112.311111,17.0777778 L124.277778,17.0777778 L124.277778,16.1444444 C124.277778,10.8777778 121.011111,7.2777778 116.211111,7.2777778 C111.311111,7.2777778 107.877778,11.0444444 107.877778,15.7111111 C107.877778,20.8777778 111.577778,24.1777778 116.477778,24.1777778 Z M120.177778,14.2111111 L112.244444,14.2111111 C112.444444,12.6111111 113.577778,10.6444444 116.211111,10.6444444 C119.011111,10.6444444 120.077778,12.6777778 120.177778,14.2111111 Z M140.544444,24.1777778 C146.544444,24.1777778 149.444444,21.1111111 149.444444,17.0444444 C149.444444,12.1111111 144.777778,11.0111111 141.111111,10.1777778 C138.544444,9.5777778 136.677778,9.1111111 136.677778,7.6111111 C136.677778,6.2777778 137.811111,5.3444444 139.944444,5.3444444 C142.111111,5.3444444 144.511111,6.1111111 146.311111,7.7777778 L148.944444,4.3111111 C146.744444,2.2777778 143.811111,1.2111111 140.277778,1.2111111 C135.044444,1.2111111 131.844444,4.2111111 131.844444,7.9111111 C131.844444,12.8777778 136.511111,13.8777778 140.144444,14.7111111 C142.711111,15.3111111 144.644444,15.8777778 144.644444,17.5444444 C144.644444,18.8111111 143.377778,20.0444444 140.777778,20.0444444 C137.711111,20.0444444 135.277778,18.6777778 133.711111,17.0444444 L131.111111,20.6444444 C133.211111,22.7444444 136.277778,24.1777778 140.544444,24.1777778 Z M158.077778,23.7777778 L161.477778,12.8111111 L164.877778,23.7777778 L169.377778,23.7777778 L174.277778,7.6777778 L169.877778,7.6777778 L166.877778,18.5111111 L163.344444,7.6777778 L159.577778,7.6777778 L156.044444,18.5111111 L153.044444,7.6777778 L148.644444,7.6777778 L153.544444,23.7777778 L158.077778,23.7777778 Z M176.811111,5.3111111 C178.211111,5.3111111 179.344444,4.1777778 179.344444,2.7777778 C179.344444,1.3777778 178.211111,0.24444444 176.811111,0.24444444 C175.444444,0.24444444 174.277778,1.3777778 174.277778,2.7777778 C174.277778,4.1777778 175.444444,5.3111111 176.811111,5.3111111 Z M178.944444,23.7777778 L178.944444,7.6777778 L174.711111,7.6777778 L174.711111,23.7777778 L178.944444,23.7777778 Z M186.677778,23.7777778 L186.677778,11.3777778 L189.944444,11.3777778 L189.944444,7.6777778 L186.677778,7.6777778 L186.677778,6.8777778 C186.677778,5.3444444 187.477778,4.5444444 188.677778,4.5444444 C189.177778,4.5444444 189.677778,4.6444444 190.044444,4.8777778 L190.911111,1.8777778 C190.144444,1.4777778 189.044444,1.2111111 187.844444,1.2111111 C184.677778,1.2111111 182.411111,3.3111111 182.411111,6.8111111 L182.411111,7.6777778 L179.744444,7.6777778 L179.744444,11.3777778 L182.411111,11.3777778 L182.411111,23.7777778 L186.677778,23.7777778 Z M196.111111,24.1777778 C197.877778,24.1777778 199.011111,23.7111111 199.644444,23.1444444 L198.744444,19.9444444 C198.511111,20.1777778 197.911111,20.4111111 197.277778,20.4111111 C196.344444,20.4111111 195.811111,19.6444444 195.811111,18.6444444 L195.811111,11.3777778 L199.077778,11.3777778 L199.077778,7.6777778 L195.811111,7.6777778 L195.811111,3.2777778 L191.544444,3.2777778 L191.544444,7.6777778 L188.877778,7.6777778 L188.877778,11.3777778 L191.544444,11.3777778 L191.544444,19.7777778 C191.544444,22.6444444 193.144444,24.1777778 196.111111,24.1777778 Z idShape>/path> /g> /g>/svg> span classsr-only>Combine Swift/span>/a> /div> div classblock lg:hidden> button typebutton idsidebar-open classflex items-center p-3 text-gray-500 lg:hidden focus:outline-none focus:text-gray-700 data-actionclick->toggle#toggle touch->toggle#toggle> svg classw-5 h-5 fill-current viewBox0 0 20 20>title>Menu/title>path dM0 3h20v2H0V3zm0 6h20v2H0V9zm0 6h20v2H0v-2z>/path>/svg> /button> /div> div classflex-grow hidden w-full pb-6 lg:flex lg:w-auto lg:pb-0 data-toggle-targettoggleable> div classlg:flex-grow> /div> div> a classnav-link unread-announcements href/announcements>span>What's New/span>/a> a classnav-link href/users/sign_in>Log In/a> /div> /div>/nav> /header> main classpx-3 lg:px-0 h-full> div classrelative px-4 sm:px-8 bg-gray-50 dark:bg-gray-900 overflow-hidden> main classmt-10 mx-auto max-w-screen-xl px-4 sm:mt-12 md:mt-16 lg:mt-20 xl:mt-28> div classtext-center> h2 classtext-4xl tracking-tight leading-10 font-extrabold text-gray-900 dark:text-gray-50 sm:leading-none sm:text-6xl> a Combine Course for br> span classtext-purple-600> mere mortals /span> /h2> p classmt-6 max-w-md mx-auto text-base text-gray-500 sm:text-lg md:text-xl md:max-w-3xl> Learn Apples Combine Framework for functional reactive programming em>without/em> breaking your brain. /p> div classmt-6 max-w-md mx-auto sm:flex sm:justify-center md:mt-8> div classrounded-md shadow> a href/courses/1-combine-swift/pricing classw-full flex items-center justify-center px-6 py-3 border border-transparent text-lg leading-6 font-medium rounded-md text-white bg-primary-500 focus:outline-none focus:border-green-700 focus:shadow-outline-green hover:bg-primary-600 hover:text-white transition duration-150 ease-in-out md:py-4 md:text-lg md:px-10> Get the Course svg xmlnshttp://www.w3.org/2000/svg viewBox0 0 20 20 roleimg aria-labelledbya94cgtniivphrnc8vkglz0f335qxjqv2 classfill-current text-white w-5 h-5 ml-3>title ida94cgtniivphrnc8vkglz0f335qxjqv2>Icons/cheveron right/title>path dM12.95 10.707l.707-.707L8 4.343 6.586 5.757 10.828 10l-4.242 4.243L8 15.657l4.95-4.95z>/path>/svg> /a> /div> /div> /div> /main> /div> div classmt-8 mb-8> div classmx-auto max-w-screen-sm border-secondary-200 bg-secondary-100 dark:bg-secondary-800 dark:border-secondary-900 text-secondary-700 dark:text-secondary-200 border-4 rounded-lg p-4> h2 classtext-2xl tracking tight leading-10 font-bold texsm:text:xl sm:leading-none md:text-3xl>Combine? Whats That?/h2> p classmy-4>Combine is Apples new framework for Functional Reactive Programming. Its essentially a first party, supported implementation of RxSwift and it will change how you write asynchronous code./p> /div> /div> div classmb-8 mt-16 rotated bg-primary-900 border-t-4 border-b-4 border-primary-200 dark:border-primary-800> div classmx-auto max-w-screen-md px-8 py-16> h2 classtext-3xl tracking-tight leading-10 font-extrabold text-gray-100 sm:text-3xl sm:leading-none md:text-4xl> Combine is hard. But its also strong classitalic text-primary-300>AWESOME/strong>. /h2> p classmy-8 text-gray-200 text-xl> If youve struggled to understand Functional Reactive Programming, strong classtext-xl text-primary-300>youre not alone/strong>. It can be difficult to understand at first. /p> p classmy-8 text-gray-200 text-xl> Ill be honest, Ive been critical of Combines learning curve in the past. But once I started to grok it, it changed how I approached problems, and allowed me to write more expressive, robust asynchronous code that Im strong classtext-xl text-primary-300>more confident/strong> in. /p> p classmy-8 text-gray-200 text-xl> Im here to help get you through the initial learning curve to help you understand and be productive with Combine. /p> /div> /div> div classm-8 mt-16 mx-auto max-w-screen-md> h2 classtext-3xl tracking-tight leading-10 font-extrabold text-gray-900 dark:text-gray-50 sm:text-xl sm:leading-none md:text-3xl> Why did I make this course? /h2> p classmy-8 text-gray-800 dark:text-gray-100 text-lg> Ive always liked the em>idea/em> of Functional Reactive Programming. Software is complex and sometimes we need tools to make the complex easier. But in practice, tools like RxSwift, ReactiveCocoa, and Combine have been strong>notoriously/strong> dense and hard to learn. /p> p classmy-8 text-gray-800 dark:text-gray-100 text-xl font-medium> span classbg-primary-100 py-1 px-3 text-primary-700 italic> So I decided to make the course that I wish I had when I was learning. /span> /p> p classmy-8 text-gray-800 dark:text-gray-100 text-lg> In this course I break down the concepts so that they are actually understandable and useful. I do this by showing the theory, then putting it into practice with live examples. /p> /div> div classmb-8 mt-16 rotated bg-teal-600> div classmx-auto max-w-screen-md px-8 py-16> h2 classtext-3xl tracking-tight leading-10 font-extrabold text-gray-100 sm:text-xl sm:leading-none md:text-3xl> What Combine span classfont-extrabold text-teal-200 underline--magical>Superpowers/span> does this course unlock? /h2> p classmy-8 text-gray-100 text-lg> After taking this course, youll: /p> ul> li classfont-semibold text-teal-100 text-xl leading-8>Understand Combine code without requiring a PhD in functional reactive programming/li> li classfont-semibold text-teal-100 text-xl leading-8>Simplify your networking stack/li> li classfont-semibold text-teal-100 text-xl leading-8>Provide robust validation to your forms/li> li classfont-semibold text-teal-100 text-xl leading-8>See how Combine fits in with your app architecture/li> li classfont-semibold text-teal-100 text-xl leading-8>See how to reuse and repurpose asynchronous data across screens/li> li classfont-semibold text-teal-100 text-xl leading-8>Write a complete weather app using Combine/li> li classfont-semibold text-teal-100 text-xl leading-8>Write your own custom publishers and operators to make your code powerful em>and/em> expressive/li> /ul> /div> /div> div classbg-gray-50 dark:bg-gray-900 pt-12 sm:pt-16> div classmax-w-screen-md mx-auto px-4 sm:px-6 lg:px-8> h3 classtext-xl font-medium text-gray-400 italic>Dont just take my word for it.../h3> section classpy-10 bg-gray-50 dark:bg-gray-900 overflow-hidden md:py-10 relative> div classabsolute left-0 md:left-10 top-10 right-0 md:right-10 bottom-0 bg-yellow-100 shadow-sm rounded-md transform md:skew-x-2>/div> div classrelative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8> div classrelative> blockquote classmt-10 px-12> div classmax-w-3xl mx-auto text-center text-2xl leading-9 font-medium text-yellow-900> p> “ I had started working with SwiftUI, but not wrapped my head around how Combine works and what it had to offer on my apps. Combine Swift was just what I needed to get over that hurdle, with clear, concise explanations of basic concepts, and well as practical code examples. ” /p> /div> footer classmt-8> div classmd:flex md:items-center md:justify-center> div classmd:flex-shrink-0> img classmx-auto h-16 w-16 rounded-full srchttps://combineswift.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBY3c9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--38eddd8deeb89ace14ffe9defdca4e6096a91e83/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFHQWFRR0EiLCJleHAiOm51bGwsInB1ciI6InZhcmlhdGlvbiJ9fQ--81266652061fba308cb9191308208e9f2d5f50b1/t8hpFYGa_400x400.jpg /> /div> div classmt-3 text-center md:mt-0 md:ml-4 md:flex md:items-center> div classtext-base font-medium text-gray-900>Greg Pierce/div> svg classhidden md:block mx-1 h-5 w-5 text-indigo-600 fillcurrentColor viewBox0 0 20 20> path dM11 0h3L9 20H6l5-20z /> /svg> div classtext-base font-medium text-gray-500>Drafts/div> /div> /div> /footer> /blockquote> /div> /div> /section> section classpy-10 bg-gray-50 dark:bg-gray-900 overflow-hidden md:py-10 relative> div classabsolute left-0 md:left-10 top-10 right-0 md:right-10 bottom-0 bg-yellow-100 shadow-sm rounded-md transform md:skew-x-2>/div> div classrelative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8> div classrelative> blockquote classmt-10 px-12> div classmax-w-3xl mx-auto text-center text-2xl leading-9 font-medium text-yellow-900> p> “ If you're having trouble getting a handle on Combine, best money you'll ever spend. It's connecting a lot of the dots for me. ” /p> /div> footer classmt-8> div classmd:flex md:items-center md:justify-center> div classmd:flex-shrink-0> img classmx-auto h-16 w-16 rounded-full srchttps://combineswift.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBYzA9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--a9bfe9c1b3798d64879d357ab78033be2883c998/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lKYW5CbFp3WTZCa1ZVT2hSeVpYTnBlbVZmZEc5ZmJHbHRhWFJiQjJrQmdHa0JnQT09IiwiZXhwIjpudWxsLCJwdXIiOiJ2YXJpYXRpb24ifX0--90f8235f374708ed7369fd0dfd020eb712b4cc84/image.jpeg /> /div> div classmt-3 text-center md:mt-0 md:ml-4 md:flex md:items-center> div classtext-base font-medium text-gray-900>Michael Prenez-Isbell/div> /div> /div> /footer> /blockquote> /div> /div> /section> section classpy-10 bg-gray-50 dark:bg-gray-900 overflow-hidden md:py-10 relative> div classabsolute left-0 md:left-10 top-10 right-0 md:right-10 bottom-0 bg-yellow-100 shadow-sm rounded-md transform md:skew-x-2>/div> div classrelative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8> div classrelative> blockquote classmt-10 px-12> div classmax-w-3xl mx-auto text-center text-2xl leading-9 font-medium text-yellow-900> p> “ Excellent, kinda mind-blowing, class! A fantastic walkthrough of not just what Combine is, but why and how you want to use it. I can’t wait to rewrite a bunch of my old code, to put all this new knowledge to use! ” /p> /div> footer classmt-8> div classmd:flex md:items-center md:justify-center> div classmd:flex-shrink-0> img classmx-auto h-16 w-16 rounded-full srchttps://combineswift.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBYzQ9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--e6cd2a89d1f62061abf8d296b8056587472a2e96/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFHQWFRR0EiLCJleHAiOm51bGwsInB1ciI6InZhcmlhdGlvbiJ9fQ--81266652061fba308cb9191308208e9f2d5f50b1/MMxX_3gA_400x400.jpg /> /div> div classmt-3 text-center md:mt-0 md:ml-4 md:flex md:items-center> div classtext-base font-medium text-gray-900>Kyle Davis/div> svg classhidden md:block mx-1 h-5 w-5 text-indigo-600 fillcurrentColor viewBox0 0 20 20> path dM11 0h3L9 20H6l5-20z /> /svg> div classtext-base font-medium text-gray-500>EOG Resources/div> /div> /div> /footer> /blockquote> /div> /div> /section> section classpy-10 bg-gray-50 dark:bg-gray-900 overflow-hidden md:py-10 relative> div classabsolute left-0 md:left-10 top-10 right-0 md:right-10 bottom-0 bg-yellow-100 shadow-sm rounded-md transform md:skew-x-2>/div> div classrelative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8> div classrelative> blockquote classmt-10 px-12> div classmax-w-3xl mx-auto text-center text-2xl leading-9 font-medium text-yellow-900> p> “ As you'd expect from the creator of NSScreencast, the video lessons are fantastic. Clear explanations with screencast style demonstrations as you go. It's good. ” /p> /div> footer classmt-8> div classmd:flex md:items-center md:justify-center> div classmd:flex-shrink-0> img classmx-auto h-16 w-16 rounded-full srchttps://combineswift.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZEE9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--e4a7178ec02bb055f67a2135a41112f3a249f1a0/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJY0c1bkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFHQWFRR0EiLCJleHAiOm51bGwsInB1ciI6InZhcmlhdGlvbiJ9fQ--0c70bf29bc14e9843c12d2c1f8b4d124978cde99/image.png /> /div> div classmt-3 text-center md:mt-0 md:ml-4 md:flex md:items-center> div classtext-base font-medium text-gray-900>Dave Verwer/div> svg classhidden md:block mx-1 h-5 w-5 text-indigo-600 fillcurrentColor viewBox0 0 20 20> path dM11 0h3L9 20H6l5-20z /> /svg> div classtext-base font-medium text-gray-500>iOS Dev Weekly/div> /div> /div> /footer> /blockquote> /div> /div> /section> /div> /div> div classbg-gray-50 dark:bg-gray-900 pt-12 sm:pt-16> div classmax-w-screen-md mx-auto px-4 sm:px-6 lg:px-8> div classmax-w-4xl mx-auto text-center> h2 classtext-3xl leading-9 font-extrabold text-gray-900 dark:text-gray-100 sm:text-4xl sm:leading-10> Up to date with latest Xcode and Swift /h2> p classmt-3 text-xl leading-7 text-gray-500 sm:mt-4> This course requires at least Xcode 12, iOS 14 / macOS Big Sur, and Swift 5.3. While much has changed about iOS and Swift, Combine has stayed relatively unchanged. /p> p classmt-3 text-xl leading-7 text-gray-500 sm:mt-4> Download before & after sample code to follow along and check your work. /p> /div> /div> div classmt-10 pb-12 sm:pb-16> div classrelative> div classabsolute inset-0 h-1/2 bg-gray-50 dark:bg-gray-900>/div> div classrelative max-w-screen-xl mx-auto px-4 sm:px-6 lg:px-8> div classmax-w-4xl mx-auto> dl classrounded-lg bg-white dark:bg-gray-200 shadow-lg sm:grid sm:grid-cols-3> div classflex flex-col border-b border-gray-100 p-6 text-center sm:border-0 sm:border-r> dt classorder-2 mt-2 text-lg leading-6 font-medium text-gray-500 idstat-video> of Video /dt> dd classorder-1 text-5xl leading-none font-extrabold text-primary-600 aria-describedbystat-video> 12 hours /dd> /div> div classflex flex-col border-t border-b border-gray-100 p-6 text-center sm:border-0 sm:border-l sm:border-r> dt classorder-2 mt-2 text-lg leading-6 font-medium text-gray-500 idstat-modules> Modules /dt> dd classorder-1 text-5xl leading-none font-extrabold text-primary-600 aria-describedbystat-modules> 11 /dd> /div> div classflex flex-col border-t border-gray-100 p-6 text-center sm:border-0 sm:border-l> dt classorder-2 mt-2 text-lg leading-6 font-medium text-gray-500 idstat-swift> Swift /dt> dd classorder-1 text-5xl leading-none font-extrabold text-primary-600 aria-describedbystat-swift> 100% /dd> /div> /dl> /div> /div> /div> /div> /div> div classm-8 mt-16 mx-auto max-w-screen-md> h2 classtext-3xl tracking-tight leading-10 font-extrabold text-gray-900 dark:text-gray-100 sm:text-xl sm:leading-none md:text-3xl> Whats in the course? /h2> p classmy-8 text-secondary-800 dark:text-secondary-300 text-lg> This course is organized into modules. Each module contains multiple videos that build upon knowledge gained in previous modules. /p> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 1: Introduction & Theory/h3> ul classmy-2> li>What is Combine?/li> li>Why Should You Learn It?/li> li>About This Course/li> li>What is FRP?/li> li>Thinking in Streams/li> li>Marble Diagrams/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 2: Combine Basics/h3> ul classmy-2> li>Publishers/li> li>Subscribers/li> li>Cancellation/li> li>Subjects/li> li>Basic Operators/li> li>Accumulating Operators/li> li>Working with Multiple Streams/li> li>flatMap and switchToLatest/li> li>Type Erasure and AnyPublisher/li> li>@Published Property Wrapper/li> li>Example App: Sign Up Form Validation/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 3: Error Handling/h3> ul classmy-2> li>Catching Errors/li> li>Throwing Errors From Operators/li> li>Changing the Failure Type/li> li>Example App: Dice Rolling/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 4: Networking/h3> ul classmy-2> li>Data Task Publisher/li> li>Decoding JSON Responses/li> li>Retrying Failed Requests/li> li>Reusable Networking Helpers/li> li>Sharing Results with Multiple Subscribers/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 5: Schedulers and Threading/h3> ul classmy-2> li>What are Schedulers?/li> li>subscribe(on:)/li> li>receive(on:)/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 6: More Publishers/h3> ul classmy-2> li>KVOPublisher/li> li>Future and Deferred/li> li>NotificationCenterPublisher/li> li>Record Publisher/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 7: App Architecture/h3> ul classmy-2> li>How Combine Fits With Your App/li> li>View Models and MVVM/li> li>Example App: Sign Up Form Validation with ViewModels/li> li>Combine and Swift UI Example App: Swift Issues/li> li>Centralizing Access to Data with ObservableObject/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 8: Build a Complete Weather App with Combine/h3> ul classmy-2> li>Project Overview/li> li>Getting an API Key / Project Tour/li> li>Autocompleting and Geocoding Cities/li> li>Saving and Loading Cities/li> li>Fetching Weather/li> li>Introduce a Weather Manager/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 9: Advanced Combine/h3> ul classmy-2> li>Custom Publishers/li> li>Create a custom publisher for the Photos Framework/li> li>UIControl Publisher/li> li>Custom Operators/li> li>Creating the Amb Operator/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 10: Testing Combine Publishers/h3> ul classmy-2> li>Basic Testing Techniques/li> li>Testing Timing/li> li>Testing Application Code - SignUpViewModel/li> li>Weather App Testing - Isolating Dependencies/li> li>Weather App Testing - Isolating and Testing the Geocoder/li> /ul> /div> div classmy-4 px-4 py-2 text-tertiary-800 text-sm border-l-4 border-primary-500 bg-primary-100> h3 classtext-xl font-bold text-secondary-900 sm:text-lg>Module 11: Debugging Pipelines/h3> ul classmy-2> li>Debugging with operators/li> li>Visualizing Pipelines with Timelane/li> li>Conclusion/li> /ul> /div> /div> !-- whats in the course --> div classm-8 mt-16 mx-auto max-w-screen-lg bg-gray-800 shadow-md rounded-md px-8 py-8> div classmax-w-screen-md mx-auto> h2 classtext-xl tracking-tight leading-10 font-extrabold text-gray-200 sm:leading-none> Meet Your Instructor /h2> div classflex items-center space-x-4 max-w-3xl my-4> img classw-16 h-16 rounded-full sm:w-32 sm:h-32 border-secondary-300 border altBen Scheirman srchttps://benpublic.s3.us-east-1.amazonaws.com/biophoto/ben17-sq.jpg width126 height126> div classmy-6 text-gray-100 text-lg font-medium> Hi there, Im Ben Scheirman. Ive been a software developer for nearly two decades and I love to share what Ive learned with others. Ive been teaching developers with videos since 2012. /div> /div> p classmb-4 text-secondary-200 text-lg font-normal> Questions? You can reach Ben on a classp-1 text-white underline hover:bg-white hover:text-gray-800 hover:no-underline hrefhttps://mastodon.xyz/@bens>Mastodon/a>. /p> /div> /div> div classmy-16 rotated bg-teal-100 border-t-4 border-b-4 border-teal-200> div classmx-auto max-w-screen-md px-8 py-16 text-center> h2 classtext-3xl tracking-tight leading-10 font-extrabold text-gray-700 sm:text-xl sm:leading-none md:text-3xl> Ready to level up with span classfont-extrabold text-teal-600 underline--magical>Combine/span>? /h2> div classmt-6 max-w-md mx-auto sm:flex sm:justify-center md:mt-8> div classrounded-md shadow> a href/courses/1-combine-swift/pricing classw-full flex items-center justify-center px-6 py-3 border border-transparent text-lg leading-6 font-medium rounded-md text-white bg-teal-500 focus:outline-none focus:border-2 focus:bg-white focus:text-teal-600 hover:bg-teal-600 hover:text-white transition duration-150 ease-in-out md:py-4 md:text-lg md:px-10> Get the Course svg xmlnshttp://www.w3.org/2000/svg viewBox0 0 20 20 roleimg aria-labelledbyaqc1ssg8mi3ba0t6pu6rkrgygj8b1cqp classfill-current text-white w-5 h-5 ml-3>title idaqc1ssg8mi3ba0t6pu6rkrgygj8b1cqp>Icons/cheveron right/title>path dM12.95 10.707l.707-.707L8 4.343 6.586 5.757 10.828 10l-4.242 4.243L8 15.657l4.95-4.95z>/path>/svg> /a> /div> /div> /div> /div> /div> /main> /div> footer classw-full h-auto px-2 py-4 text-sm lg:px-6> div classflex flex-col-reverse p-4 text-sm lg:flex-row lg:justify-between lg:p-0> div classflex items-center justify-center> a classhidden sm:inline-block href/> svg xmlnshttp://www.w3.org/2000/svg xmlns:xlinkhttp://www.w3.org/1999/xlink width32px height32px viewBox0 0 32 32 version1.1 roleimg aria-labelledbya8ldd2wr6tr7fie08aaxyvjjphi0qnou classfill-current text-gray-700 hover:text-gray-800 dark:text-gray-50 dark:hover:text-gray-200>title ida8ldd2wr6tr7fie08aaxyvjjphi0qnou>Mark/title> defs> filter> feColorMatrix inSourceGraphic typematrix values0 0 0 0 0.445741 0 0 0 0 0.471014 0 0 0 0 0.449275 0 0 0 1.000000 0>/feColorMatrix> /filter> /defs> g idLogo strokenone stroke-width1 fillnone fill-ruleevenodd> g transformtranslate(-109.000000, -228.000000)> g transformtranslate(109.000000, 228.000000) filterurl(#filter-1)> g> path dM15.9996553,10.375 C17.0838014,9.02955003 18.3977861,7.88688283 19.8806612,7 C18.8881079,5.26456701 17.5704088,3.73670387 15.9996553,2.5 C14.4289017,3.73670387 13.1112026,5.26456701 12.1186493,7 C13.6015244,7.88688283 14.9155091,9.02955003 15.9996553,10.375 L15.9996553,10.375 Z M17.5070605,12.0625 C18.34487,12.7191657 19.1002945,13.4746378 19.756919,14.3125 C21.3189735,13.5326939 22.998895,13.0157624 24.7291063,12.7825 C24.3174712,11.0778907 23.5508202,9.47932274 22.4792478,8.09125 C20.5040307,8.95890606 18.7899602,10.3279218 17.5070605,12.0625 L17.5070605,12.0625 Z M27.2489478,14.875 C24.3097575,14.8315454 21.433218,15.7260872 19.0369643,17.42875 C18.3107529,15.9918257 17.2731089,14.7350444 15.9996553,13.75 C14.7280543,14.7415128 13.690951,16.0014805 12.9623463,17.44 C10.5660516,15.7361752 7.69034736,14.8379536 4.75017949,14.875 C4.73255317,17.7025789 6.01399933,20.3817578 8.2263941,22.1425 C10.112963,23.7286511 12.425685,24.7226754 14.874726,25 L14.874726,28.375 C14.874726,28.9963203 15.378374,29.5 15.9996553,29.5 C16.6209365,29.5 17.1245845,28.9963203 17.1245845,28.375 L17.1245845,25 C19.570954,24.739002 21.8867232,23.7649095 23.7841657,22.19875 C26.0121197,20.4268156 27.2919951,17.7214542 27.2489478,14.875 Z M14.4922501,12.0625 C13.2081567,10.3418398 11.4985111,8.98489292 9.53131204,8.125 C8.46115371,9.50974906 7.69456917,11.1043452 7.28145352,12.805 C9.01214503,13.0426087 10.6919667,13.5633101 12.2536408,14.34625 C12.9046748,13.4972015 13.6563777,12.7303408 14.4922501,12.0625 L14.4922501,12.0625 Z fill#000000 fill-rulenonzero>/path> /g> /g> /g> /g>/svg>/a> div classml-4 text-gray-700 dark:text-gray-50>© 2026 Fickle Bits, LLC/div> /div> ul classlist-none flex flex-wrap items-center justify-center> li>a classtext-gray-700 hover:text-gray-800 dark:text-gray-50 dark:hover:text-gray-200 no-underline block lg:my-0 my-2 px-4 href/privacy>Privacy Policy/a>/li> /ul> /div>/footer> ninja-keys data-controllercommand-palette hideBreadcrumbs>/ninja-keys> script typetext/javascript> var Countly Countly || {}; Countly.q Countly.q || ; Countly.app_key af896f7ad2c6a347f9137ac45f637e22cfebfcb1; Countly.url https://analytics.ficklebits.com; Countly.q.push(track_sessions); (function() { var cly document.createElement(script); cly.type text/javascript; cly.async true; cly.src https://cdnjs.cloudflare.com/ajax/libs/countly-sdk-web/20.4.0/countly.min.js; cly.onload function(){Countly.init()}; var s document.getElementsByTagName(script)0; s.parentNode.insertBefore(cly, s); })(); /script> noscript>img srchttps://analytics.ficklebits.com/pixel.png?app_keyaf896f7ad2c6a347f9137ac45f637e22cfebfcb1&begin_session1/>/noscript> /body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]