<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[13 報: SwiftUI 專欄]]></title><description><![CDATA[SwiftUI 讀完就入坑]]></description><link>https://www.ethanhuang13.com/s/swiftui</link><image><url>https://substackcdn.com/image/fetch/$s_!vKYq!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F60af35b8-8dbb-47b0-b0cf-7626a48ba296_1280x1280.png</url><title>13 報: SwiftUI 專欄</title><link>https://www.ethanhuang13.com/s/swiftui</link></image><generator>Substack</generator><lastBuildDate>Wed, 08 Apr 2026 08:03:23 GMT</lastBuildDate><atom:link href="https://www.ethanhuang13.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[ethanhuang13]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[ethanhuang13@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[ethanhuang13@substack.com]]></itunes:email><itunes:name><![CDATA[13]]></itunes:name></itunes:owner><itunes:author><![CDATA[13]]></itunes:author><googleplay:owner><![CDATA[ethanhuang13@substack.com]]></googleplay:owner><googleplay:email><![CDATA[ethanhuang13@substack.com]]></googleplay:email><googleplay:author><![CDATA[13]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[SwiftUI 專欄 #8 連載再開。描述性框架、狀態驅動、TCA]]></title><description><![CDATA[SwiftUI &#35712;&#23436;&#23601;&#20837;&#22353; 2024/12/02]]></description><link>https://www.ethanhuang13.com/p/swiftui-8-tca</link><guid isPermaLink="false">https://www.ethanhuang13.com/p/swiftui-8-tca</guid><dc:creator><![CDATA[13]]></dc:creator><pubDate>Sun, 01 Dec 2024 22:01:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hy6E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95d9059a-c2ca-4d36-b49e-b91f87eea5e0_2012x1254.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>13 &#30340;&#35441;</strong></p><blockquote><p>13 &#22577;&#30340; SwiftUI &#23560;&#27396;&#22312; 2022 &#24180;&#25104;&#31435;&#26178;&#65292;&#23601;&#26159;&#19968;&#20491;&#20184;&#36027;&#23560;&#27396;&#12290;&#21482;&#26159;&#30070;&#26178;&#25105;&#27794;&#26377;&#35373;&#31435;&#20184;&#36027;&#29254;&#65292;&#32780;&#26159;&#25505;&#29992;&#12300;&#35488;&#23526;&#35330;&#38321;&#12301;&#21046;&#24230;&#12290;&#30070;&#26178;&#23601;&#26377;&#19981;&#23569;&#26379;&#21451;&#35330;&#38321;&#20102;&#25105;&#30340; Patreon &#20358;&#25903;&#25345;&#25105;&#23531;&#20316;&#65292;&#38750;&#24120;&#35613;&#35613;&#20320;&#20497;&#65281;</p><p>&#20170;&#24180; 9 &#26376;&#65292;&#25105;&#21855;&#21205;&#20102; <a href="http://iosdeveloper.plus/">iOS Developer+ &#26371;&#21729;</a>&#65292;<a href="https://ethanhuang13.notion.site/ios-developer-plus-benefits">&#23531;&#20102;&#24456;&#22810;&#25991;&#31456;</a>&#12290;&#28982;&#24460;&#19978;&#20491;&#26376;&#22312; iPlayground &#35611;&#20102; SwiftUI&#65292;&#35258;&#24471;&#26377;&#24456;&#22810;&#26481;&#35199;&#21487;&#20197;&#20877;&#36319;&#22823;&#23478;&#20998;&#20139;&#65292;&#25152;&#20197;&#36889;&#20491;&#23560;&#27396;&#21487;&#20197;&#32380;&#32396;&#36899;&#36617;&#20102;&#65374;</p><p>&#20170;&#22825;&#36889;&#23553;&#38651;&#23376;&#22577;&#21482;&#26159;&#26032;&#36899;&#36617;&#20839;&#23481;&#30340;&#38283;&#38957;&#65292;&#23436;&#25972;&#30340;&#25991;&#31456;&#20197;&#21450;&#24460;&#32396;&#20839;&#23481;&#35531;&#21152;&#20837; <a href="http://iosdeveloper.plus/">iOS Developer+</a> &#26371;&#21729;&#20358;&#35264;&#30475;&#12290;</p><p>&#38500;&#27492;&#20043;&#22806;&#65292;&#26377;&#19968;&#20214;&#37325;&#35201;&#30340;&#20107;&#24773;&#25552;&#37266;&#65306;&#23601;&#26159; iOS Developer+ &#30340;&#24180;&#24230;&#38480;&#23450;&#20778;&#24800;&#21040;&#20170;&#22825;&#65288;<a href="https://zh.wikipedia.org/zh-tw/%E7%B6%B2%E8%B7%AF%E6%98%9F%E6%9C%9F%E4%B8%80">Cyber Monday</a>&#65289;&#25130;&#27490;&#12290;</p><p>&#26412;&#20358;&#26159;&#19978;&#36913;&#28858;&#20102;&#24950;&#31069;&#21488;&#28771;&#29554;&#24471;&#19990;&#30028;&#26834;&#29699; 12 &#24375;&#36093;&#20896;&#36557;&#65292;&#21083;&#22909;&#36319; Black Friday &#20197;&#21450; Cyber Monday &#30340;&#26178;&#38291;&#30456;&#36817;&#65292;&#25152;&#20197;&#25105;&#23601;&#35373;&#23450;&#21040;&#20170;&#22825;&#25130;&#27490;&#12290;</p><p>&#25105;&#30340;&#20491;&#24615;&#27794;&#26377;&#24456;&#21916;&#27489;&#20570;&#20419;&#37559;&#65292;&#25152;&#20197;&#35531;&#25226;&#25569;&#27231;&#26371;&#12290;</p><p>&#35330;&#38321;&#20102;&#23601;&#21487;&#20197;&#30475;&#21040;<a href="https://ethanhuang13.notion.site/ios-developer-plus-benefits">&#36942;&#21435;&#25152;&#26377;&#30340;&#20839;&#23481;</a>&#65292;&#25105;&#20063;&#26371;&#25226;&#20320;&#36992;&#35531;&#21040;&#25105;&#30340; Notion&#65288;&#20027;&#35201;&#26159;&#22240;&#28858;&#65292;&#22312; Notion &#25490;&#29256;&#27604; Patreon &#26356;&#22909;&#30475;&#65289;&#12290;</p><p>&#20778;&#24800;&#36774;&#27861;&#25105;&#23531;&#22312;&#25991;&#26411;&#12290;</p><p>&#65288;<a href="https://www.ethanhuang13.com/p/swiftui-7-expectation-management">&#30475;&#21069;&#19968;&#26399;</a> &#183; <a href="https://www.ethanhuang13.com/p/swiftui-index">&#22238;&#23560;&#27396;&#30446;&#37636;</a> &#183; <a href="https://www.ethanhuang13.com/">&#22238;&#39318;&#38913;</a>&#65289;</p></blockquote><div><hr></div><h2>&#36899;&#36617;&#20877;&#38283;</h2><p><strong>SwiftUI &#26412;&#20358;&#23601;&#26159;&#25105;&#24456;&#38364;&#24515;&#19988;&#29087;&#24713;&#30340;&#20027;&#38988;&#65292;&#20043;&#24460;&#20063;&#26371;&#22312; iOS Developer+ &#20998;&#20139;&#12290;</strong></p><p>&#26377;&#20841;&#20491;&#21407;&#22240;&#12290;</p><p>&#19968;&#20491;&#26159; 2022 &#24180;&#25105;&#23601;&#22312; 13 &#22577;&#23531;&#36942;&#24190;&#31687;&#12300;<a href="https://www.ethanhuang13.com/p/swiftui-index">SwiftUI &#19968;&#35712;&#23601;&#20837;&#22353;</a>&#12301;&#23560;&#27396;&#25991;&#31456;&#65292;&#19968;&#30452;&#37117;&#23565;&#26044;&#23531; SwiftUI &#20027;&#38988;&#24456;&#26377;&#33288;&#36259;&#12290;&#31639;&#26159;&#36899;&#36617;&#20877;&#38283;&#21543;&#65281;</p><p>&#21478;&#19968;&#20491;&#26159;&#65292;&#19978;&#20491;&#26376;&#25105;&#22312; iPlayground &#20197;&#12300;<a href="https://www.notion.so/Why-SwiftUI-Why-TCA-iPlayground-2024-13522d68d8c580888413d0e8e0f394e3?pvs=21">Why SwiftUI? Why TCA?</a>&#12301;&#20316;&#28858;&#38283;&#22580;&#38988;&#30446;&#12290;&#28858;&#20102;&#28310;&#20633;&#65292;&#25105;&#23565; SwiftUI &#21448;&#26377;&#19968;&#20123;&#26356;&#28145;&#20837;&#30340;&#24605;&#32771;&#33287;&#35469;&#35672;&#12290;</p><p>&#28436;&#35611;&#26178;&#38291;&#21482;&#26377; 30 &#20998;&#37912;&#65292;&#20839;&#23481;&#38750;&#24120;&#32202;&#28234;&#12290;&#32780;&#25105;&#22312;&#21488;&#19978;&#30340;&#24863;&#35258;&#26159;&#65292;&#24456;&#22810;&#37325;&#40670;&#27794;&#26377;&#20805;&#20998;&#20659;&#36958;&#32102;&#21488;&#19979;&#32893;&#30526;&#65292;&#26377;&#40670;&#21487;&#24796;&#12290;</p><p>&#32317;&#20043;&#65292;SwiftUI &#26377;&#24456;&#22810;&#26481;&#35199;&#21487;&#20197;&#24930;&#24930;&#32842;&#12290;</p><p>&#20170;&#22825;&#36889;&#31687;&#25991;&#31456;&#25105;&#24819;&#20358;&#35611;&#35611; SwiftUI &#36889;&#39006;&#26694;&#26550;&#24456;&#37325;&#35201;&#30340;&#35264;&#24565;&#9472;&#9472;<strong>&#25551;&#36848;&#24615;</strong>&#33287;<strong>&#29376;&#24907;&#39493;&#21205;</strong>&#12290;</p><h2><strong>&#29376;&#24907;&#39493;&#21205;</strong></h2><p>&#36889;&#26159;&#25105;&#22312; iPlayground &#28436;&#35611;&#26178;&#65292;&#25918;&#20102;&#22909;&#24190;&#27425;&#30340;&#25237;&#24433;&#29255;&#12290;</p><p>&#19981;&#30693;&#36947;&#20320;&#26159;&#21542;&#30475;&#24471;&#25026;&#36889;&#19977;&#21477;&#35441;&#21602;&#65311;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hy6E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95d9059a-c2ca-4d36-b49e-b91f87eea5e0_2012x1254.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hy6E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95d9059a-c2ca-4d36-b49e-b91f87eea5e0_2012x1254.png 424w, https://substackcdn.com/image/fetch/$s_!hy6E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95d9059a-c2ca-4d36-b49e-b91f87eea5e0_2012x1254.png 848w, https://substackcdn.com/image/fetch/$s_!hy6E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95d9059a-c2ca-4d36-b49e-b91f87eea5e0_2012x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!hy6E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95d9059a-c2ca-4d36-b49e-b91f87eea5e0_2012x1254.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hy6E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95d9059a-c2ca-4d36-b49e-b91f87eea5e0_2012x1254.png" width="1456" height="907" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95d9059a-c2ca-4d36-b49e-b91f87eea5e0_2012x1254.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:907,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hy6E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95d9059a-c2ca-4d36-b49e-b91f87eea5e0_2012x1254.png 424w, https://substackcdn.com/image/fetch/$s_!hy6E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95d9059a-c2ca-4d36-b49e-b91f87eea5e0_2012x1254.png 848w, https://substackcdn.com/image/fetch/$s_!hy6E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95d9059a-c2ca-4d36-b49e-b91f87eea5e0_2012x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!hy6E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95d9059a-c2ca-4d36-b49e-b91f87eea5e0_2012x1254.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#30475;&#24471;&#25026;&#30340;&#35441;&#65292;&#34920;&#31034;&#20320;&#30637;&#35299;<strong>&#29376;&#24907;&#39493;&#21205;&#65288;state-driven&#65289;</strong>&#65292;&#20063;&#26159; SwiftUI &#30340;&#37325;&#35201;&#29305;&#24615;&#12290;</p><p>&#22914;&#26524;&#20320;&#26159;&#36039;&#28145; iOS &#24037;&#31243;&#24107;&#30340;&#35441;&#65292;&#24656;&#24597;&#21453;&#32780;&#19981;&#23481;&#26131;&#30452;&#35258;&#22320;&#21435;&#29702;&#35299;&#12290;</p><p>&#22240;&#28858; UIKit &#20006;&#19981;&#26159;&#29376;&#24907;&#39493;&#21205;&#30340;&#26694;&#26550;&#12290;</p><p>&#128272;&#24460;&#32396;&#20839;&#23481;&#35531;&#21069;&#24448; <a href="http://iosdeveloper.plus/">iosdeveloper.plus</a> &#35330;&#38321;&#65292;&#21462;&#24471;&#25152;&#26377;&#29544;&#23478;&#20839;&#23481;&#12290;&#25152;&#26377;&#25991;&#31456;&#21487;&#20197;&#22312;&#36889;&#35041;<a href="https://ethanhuang13.notion.site/ios-developer-plus-benefits">&#38928;&#35261;</a>&#12290;</p><div><hr></div><p>&#127881;<strong>&#24950;&#31069;&#21488;&#28771;&#20197; 4:0 &#25802;&#25943;&#26085;&#26412;&#38538;&#22890;&#24471;&#19990;&#30028;&#26834;&#29699; 12 &#24375;&#36093;&#20896;&#36557;&#65292;iOS Developer+ &#26371;&#21729;&#38480;&#26178; 40% Off&#65281;</strong></p><p>&#21040; <a href="https://iosdeveloper.plus">https://iosdeveloper.plus</a> &#35330;&#38321; iOS Developer+ &#20006;&#36664;&#20837; <code>TEAMTAIWAN</code> &#21363;&#21487;&#29554;&#24471;&#31532;&#19968;&#20491;&#26376;&#30340;&#25240;&#25187;&#12290;</p><p>&#27963;&#21205;&#26399;&#38291;&#21040;&#21488;&#28771;&#26178;&#38291;&#30340; 2024/12/2&#65288;Cyber Monday&#65289;23:59 &#28858;&#27490;&#12290;</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI 專欄 #7 不期待就沒有傷害 ]]></title><description><![CDATA[SwiftUI &#35712;&#23436;&#23601;&#20837;&#22353; 2022/10/13]]></description><link>https://www.ethanhuang13.com/p/swiftui-7-expectation-management</link><guid isPermaLink="false">https://www.ethanhuang13.com/p/swiftui-7-expectation-management</guid><dc:creator><![CDATA[13]]></dc:creator><pubDate>Wed, 12 Oct 2022 22:00:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fpbs.substack.com%2Fmedia%2FEBhffdbW4AAKLDn.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>13 &#30340;&#35441;</strong></p><blockquote><p>SwiftUI &#23560;&#27396;&#26159;&#19968;&#20491;&#20184;&#36027;&#23560;&#27396;&#65292;&#21482;&#26159;&#25105;&#27794;&#26377;&#35373;&#31435;&#20184;&#36027;&#29254;&#65292;&#32780;&#26159;&#25505;&#29992;&#12300;&#35488;&#23526;&#35330;&#38321;&#12301;&#21046;&#24230;&#12290;</p><p>&#25105;&#30340;&#30446;&#27161;&#26159;&#32047;&#31309;&#21040; 100 &#20301;&nbsp;<a href="https://www.patreon.com/ethanhuang13">Patreon</a>&nbsp;&#25903;&#25345;&#32773;&#65292;&#30446;&#21069;&#36914;&#24230;&#20358;&#21040;&nbsp;<strong>28%</strong>&#65292;&#24863;&#35613;&#26032;&#33290;&#26379;&#21451;&#20497;&#30340;&#25903;&#25345;&#12290;</p><p>&#65288;<a href="https://www.ethanhuang13.com/p/swiftui-6-doc-tools">&#30475;&#21069;&#19968;&#26399;</a>&nbsp;&#183;&nbsp;<a href="https://www.ethanhuang13.com/p/swiftui-index">&#22238;&#23560;&#27396;&#30446;&#37636;</a>&nbsp;&#183;&nbsp;<a href="https://www.ethanhuang13.com/">&#22238;&#39318;&#38913;</a>&#65289;</p></blockquote><div><hr></div><h2><strong>&#21069;&#35328;</strong></h2><p>&#30456;&#38548;&#19968;&#20491;&#22810;&#26376;&#65292;&#21448;&#33287;&#22823;&#23478;&#35211;&#38754;&#20102;&#12290;</p><p>&#22374;&#30333;&#35498;&#65292;&#22312;&#36942;&#21435;&#36889;&#20491;&#26376;&#35041;&#65292;&#25105;&#23565; SwiftUI &#30340;&#24863;&#21463;&#26159;&#20116;&#21619;&#38620;&#38515;&#65292;&#30452;&#25509;&#23566;&#33268;&#36889;&#20491;&#23560;&#27396;&#30340;&#38627;&#29986;&#12290;</p><p>&#24590;&#40636;&#35498;&#21602;&#65311;&#38568;&#33879; iOS 16.0 &#30340;&#27491;&#24335;&#30332;&#20296;&#65292;&#38283;&#30332;&#32773;&#31038;&#32676;&#20063;&#30332;&#29694;&#22823;&#37327;&#30340; SwiftUI bugs&#12290;&#26377;&#20123; bugs &#22312; iOS 16 &#30340; beta &#29256;&#29978;&#33267;&#26159;&#27794;&#20986;&#29694;&#36942;&#30340;&#12290;&#37027;&#20123; bugs &#37117;&#26159; Apple &#19981;&#35442;&#20132;&#32102;&#38283;&#30332;&#32773;&#30340;&#26481;&#35199;&#12290;</p><p>&#36889;&#23601;&#35731;&#25105;&#24863;&#21040;&#28858;&#38627;&#12290;&#38614;&#28982;&#36889;&#20491;&#23560;&#27396;&#38283;&#23447;&#26126;&#32681;&#23601;&#35498;&#26159;&#35712;&#23436;&#23601;&#12300;&#20837;&#22353;&#12301;&#65292;&#20294;&#36889;&#20491;&#24773;&#27841;&#20063;&#23526;&#22312;&#24920;&#28872;&#12290;</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/ethanhuang13pro/status/1574260139439554560&quot;,&quot;full_text&quot;:&quot;SwiftUI &#22312; iOS 16 &#30340;&#22353;&#22810;&#21040;&#25105;&#37117;&#19981;&#24819;&#32380;&#32396;&#23531;&#12300;SwiftUI &#20837;&#22353;&#12301;&#23560;&#27396;&#20102;&#12290;&#35443;&#24773;&#35211; <span class=\&quot;tweet-fake-link\&quot;>@fatbobman</span> &#30340;&#30526;&#22810;&#25512;&#25991;&quot;,&quot;username&quot;:&quot;ethanhuang13pro&quot;,&quot;name&quot;:&quot;13 Pro&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Sep 26 04:50:40 +0000 2022&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:2,&quot;like_count&quot;:56,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/fatbobman/status/1574547324709138432&quot;,&quot;full_text&quot;:&quot;&#33258;&#25105;&#23433;&#24944;&#19968;&#19979;&#65306;SwiftUI 4 &#20013;&#20986;&#29616;&#20102;&#22823;&#37327;&#19981;&#21487;&#24605;&#35758;&#30340; Bug&#65292;&#20363;&#22914;&#35270;&#22270;&#26080;&#27861;&#25345;&#20037;&#12289;task &#26080;&#27861;&#35302;&#21457;&#12289;&#38381;&#21253;&#20195;&#30721;&#26080;&#27861;&#26356;&#26032;&#35270;&#22270;&#31561;&#24773;&#20917;&#12290;&#19968;&#26041;&#38754;&#34920;&#26126;&#65292;&#33529;&#26524;&#30340;&#24320;&#21457;&#31649;&#29702;&#20986;&#29616;&#20102;&#26126;&#26174;&#30340;&#38382;&#39064;&#65292;&#21478;&#19968;&#26041;&#38754;&#65292;&#20063;&#38388;&#25509;&#22320;&#35777;&#26126;&#20102; SwiftUI 4 &#37325;&#20889;&#20102;&#22823;&#37327;&#30340;&#24213;&#23618;&#20195;&#30721;&#65292;&#24453;&#36825;&#20123;&#20195;&#30721;&#31283;&#23450;&#21518;&#65292;&#21487;&#33021;&#20250;&#26377;&#19981;&#38169;&#30340;&#32467;&#26524;&#65288; &#20063;&#35768;&#26159;&#26356;&#22810;&#30340; Bug &#65289;&quot;,&quot;username&quot;:&quot;fatbobman&quot;,&quot;name&quot;:&quot;fatbobman (&#19996;&#22369;&#32920;&#23376;)&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Sep 26 23:51:50 +0000 2022&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:2,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>&#19979;&#38754;&#25105;&#26371;&#36681;&#36617;&#19968;&#20123; SwiftUI &#22312; iOS 16 &#19978;&#30340;&#21839;&#38988;&#65292;&#28982;&#24460;&#35527;&#35527;&#25105;&#23565;&#36889;&#20123;&#29694;&#35937;&#30340;&#29468;&#24819;&#12290;</p><h2><strong>&#26694;&#26550;&#34701;&#21512;&#30340;&#38627;&#34389;</strong></h2><p>&#26377;&#20491;&#35264;&#40670;&#19981;&#19968;&#23450;&#23565;&#65292;&#20294;&#25105;&#24120;&#24120;&#35611;&#65292;&#23601;&#26159;&#65306;SwiftUI &#36889;&#20491;&#26694;&#26550;&#26412;&#36523;&#30340;&#21839;&#38988;&#20854;&#23526;&#19981;&#22810;&#12290;&#36890;&#24120;&#26368;&#22196;&#37325;&#30340;&#21839;&#38988;&#37117;&#26159;&#23427;&#36319;&#20854;&#20182;&#26694;&#26550;&#20018;&#25509;&#30340;&#26178;&#20505;&#12290;</p><p><code>Text</code>&#12289;<code>Color</code>&#12289;<code>Shape</code>&#12289;<code>VStack</code>&nbsp;&#36889;&#20123;&#12300;&#21407;&#29983; SwiftUI&#12301;&#30340;&#26481;&#35199;&#24456;&#23569;&#36935;&#21040;&#21839;&#38988;&#12290;</p><p>&#20294;&#20687;&#26159;&#29992; UIKit &#20570;&#30340;&nbsp;<code>List</code>&#65292;&#24478; iOS 13 &#20197;&#20358;&#23601;&#26159;&#37325;&#28797;&#21312;&#12290;&#20063;&#26159;&#25105;&#22312;&nbsp;<a href="https://www.ethanhuang13.com/i/61719362/%E4%B8%8D%E6%8E%A8%E8%96%A6%E4%BD%BF%E7%94%A8-list">#3 &#37027;&#20123;&#19981;&#35442;&#30896;&#30340; SwiftUI API &#35041;&#38754;&#29305;&#21029;&#19981;&#25512;&#34214;</a>&#30340;&#21151;&#33021;&#12290;</p><p>&#20197;&#19979;&#20841;&#20491; iOS 16 bugs &#37117;&#36319;&nbsp;<code>List</code>&nbsp;&#26377;&#38364;&#12290;</p><p><code>List</code> &#25645;&#37197; <code>ScrollViewProxy</code> &#36914;&#34892;&#25458;&#21205;&#65292;&#26377;&#21487;&#33021;&#26371; crash&#65306;</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/fatbobman/status/1569987461413240833&quot;,&quot;full_text&quot;:&quot;iOS 16 &#19979; List &#28378;&#21160;&#23849;&#28291;&#8252;&#65039;\n\n&#25509;&#21040;&#32593;&#21451;&#21453;&#39304;&#65292;&#32463;&#36807;&#27979;&#35797;&#21457;&#29616;&#22312; iOS 16 &#19978;&#65292;&#24403; List &#20013;&#30340;&#25968;&#25454;&#22312;&#21457;&#29983;&#21464;&#21160;&#21518;&#65292;&#20351;&#29992; ScrollViewProxy &#36827;&#34892;&#28378;&#21160;&#65292;&#22823;&#27010;&#29575;&#20250;&#20986;&#29616;&#24212;&#29992;&#23849;&#28291;&#30340;&#24773;&#20917;\n\n&#20272;&#35745;&#24212;&#35813;&#19982; List &#30340;&#26174;&#24335;&#26631;&#35782;&#35843;&#25972;&#26377;&#20851;\n\nScrollView + VStack&#65288; LazyVStack &#65289;&#19981;&#20250;&#20986;&#29616;&#23849;&#28291;&#29616;&#35937;\n\n&#29992;&#19979;&#38754;&#30340;&#20195;&#30721;&#24456;&#23481;&#26131;&#23601;&#21487;&#20197;&#27979;&#35797;&#20986;&#26469; &quot;,&quot;username&quot;:&quot;fatbobman&quot;,&quot;name&quot;:&quot;fatbobman (&#19996;&#22369;&#32920;&#23376;)&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Wed Sep 14 09:52:34 +0000 2022&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/Fcm2HQNaIAIQSfh.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/wr0DWwr1cf&quot;,&quot;alt_text&quot;:null},{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/Fcm2IV9aAAESFTS.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/wr0DWwr1cf&quot;,&quot;alt_text&quot;:null},{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/Fcm3I-4agAAgbw_.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/wr0DWwr1cf&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:6,&quot;like_count&quot;:28,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p><code>List</code> &#26377;&#26178;&#19981;&#26371;&#35320;&#30332; <code>.task</code>&#65306;</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/fatbobman/status/1574252681467637760&quot;,&quot;full_text&quot;:&quot;<span class=\&quot;tweet-fake-link\&quot;>#SwiftUI4_Bug</span> List &#23376;&#35270;&#22270;&#20013;&#30340; task &#20250;&#20986;&#29616;&#26080;&#27861;&#35843;&#29992;&#30340;&#24773;&#20917;\n\n&#22312;&#27491;&#24120;&#24773;&#20917;&#19979;,SwiftUI &#35843;&#29992; .task &#20462;&#39280;&#22120;&#30340;&#38381;&#21253;&#19982;&#35843;&#29992; onAppear &#30340;&#38381;&#21253;&#30340;&#39057;&#29575;&#24212;&#35813;&#26159;&#19968;&#33268;&#30340;\n\n&#22312; SwiftUI 4 &#20013;&#65292;&#24403;&#28378;&#21160; List &#26102;&#65292;SwiftUI &#26080;&#27861; 100% &#35843;&#29992; task &#30340;&#38381;&#21253;\n\n&#20854;&#20182; Lazy &#23481;&#22120;&#27809;&#26377;&#20986;&#29616;&#19978;&#36848;&#24773;&#20917;&#65292;&#27492;&#38382;&#39064;&#22312; Xcode 14.1 beta &#20013;&#20173;&#28982;&#23384;&#22312; &quot;,&quot;username&quot;:&quot;fatbobman&quot;,&quot;name&quot;:&quot;fatbobman (&#19996;&#22369;&#32920;&#23376;)&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Sep 26 04:21:02 +0000 2022&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://substackcdn.com/image/upload/w_1028,c_limit,q_auto:best/l_twitter_play_button_rvaygk,w_88/l43jykpaxilxg8fjsx82&quot;,&quot;link_url&quot;:&quot;https://t.co/7LklmCCDl0&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:1,&quot;like_count&quot;:15,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:&quot;https://video.twimg.com/ext_tw_video/1574252010768986112/pu/vid/386x360/pYJ0g30UOLpnaOu6.mp4?tag=12&quot;,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>Apple &#22312; WWDC22 &#25351;&#20986;&#65292;iOS 16 &#35041;&#30340;&nbsp;<code>List</code>&nbsp;&#23526;&#20316;&#24050;&#32147;&#24478;&nbsp;<code>UITableView</code>&nbsp;&#25913;&#25104;&nbsp;<code>UICollectionView</code>&#12290;</p><p>&#25105;&#20497;&#21487;&#20197;&#21512;&#29702;&#29468;&#24819;&#65292;SwiftUI &#24037;&#31243;&#24107;&#22312;&#20462;&#25913;&#21628;&#21483; <code>UICollectionView</code> &#37027;&#37002;&#65292;&#26377;&#20123;&#24773;&#27841;&#27794;&#26377;&#32771;&#24942;&#22909;&#12290;</p><p>&#25110;&#32773;&#25105;&#20497;&#20063;&#21487;&#20197;&#35498;&#65292;&#36889;&#20841;&#31278;&#25130;&#28982;&#19981;&#21516;&#21407;&#29702;&#39006;&#22411;&#30340;&#26694;&#26550;&#35201;&#34701;&#21512;&#65292;&#22825;&#29983;&#23601;&#26377;&#38627;&#24230;&#65311;</p><p>SwiftUI &#30340;&#21407;&#21063;&#26159;&#12300;&#25913;&#35722;&#29376;&#24907;&#23601;&#25913;&#35722;&#30059;&#38754;&#12301;&#12290;&#35201;&#29992; UIKit &#20358;&#23526;&#20316;&#36889;&#20491;&#35201;&#26524;&#65292;&#23601;&#35722;&#25104;&#12300;&#26694;&#26550;&#35201;&#26126;&#30906;&#36861;&#36452;&#21040;&#29376;&#24907;&#25913;&#35722;&#65292;&#20006;&#19988;&#20351;&#29992; UIKit &#30340;&#26041;&#24335;&#25226;&#30059;&#38754;&#35373;&#23450;&#27491;&#30906;&#12301;&#12290;</p><p>&#37027;&#40636;&#36889;&#20123;&#27211;&#25509;&#33287;&#34701;&#21512;&#30340;&#31243;&#24335;&#30908;&#23601;&#35201;&#38754;&#33256;&#25361;&#25136;&#65306;SwiftUI &#30340;&#30059;&#38754;&#26356;&#26032;&#36913;&#26399;&#65292;&#33021;&#22816;&#33287; UIKit &#30340;&#33021;&#22816;&#23436;&#20840;&#21516;&#27493;&#21966;&#65311;UIKit &#30340;&#20107;&#20214;&#33021;&#22816;&#23436;&#32654;&#22320;&#20659;&#22238; SwiftUI &#21966;&#65311;</p><p>&#22914;&#26524;&#26377;&#20219;&#20309;&#19968;&#40670;&#20570;&#19981;&#21040;&#30340;&#35441;&#65292;&#23601;&#26159;&#28797;&#38627;&#30340;&#38283;&#22987;&#12290;</p><blockquote><p>&#25105;&#27794;&#26377;&#29992;&#36942; React Native&#65292;&#20294;&#25105;&#29468; RN &#22312;&#33287; UIKit &#28317;&#36890;&#20063;&#26371;&#26377;&#39006;&#20284;&#30340;&#25361;&#25136;&#12290;</p></blockquote><h2><strong>&#20854;&#20182; Bugs</strong></h2><p>&#19981;&#36942;&#19979;&#38754;&#36889;&#24190;&#20491;&#21839;&#38988;&#65292;&#25105;&#23601;&#27794;&#36774;&#27861;&#21934;&#32020;&#29992; UIKit &#20358;&#30070;&#25803;&#31661;&#29260;&#20102;&#128517;</p><p><code>ScrollView</code>&#65288;&#38614;&#35498;&#23427;&#30446;&#21069;&#36996;&#26159;&nbsp;<code>UIScrollView</code>&nbsp;&#23526;&#20316;&#65289;&#35041;&#30340; lazy&nbsp;<code>View</code>&nbsp;&#30340;&#29376;&#24907;&#27794;&#26377;&#32173;&#25345;&#20303;&#12290;&#22855;&#24618;&#30340;&#26159;&#36889;&#20491;&nbsp;<code>View</code>&nbsp;&#35041;&#38754;&#26377;&#24190;&#23652;&#36996;&#26377;&#24046;&#129300;</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/fatbobman/status/1572507700436807683&quot;,&quot;full_text&quot;:&quot;&#35686;&#24789;&#8252;&#65039; &#28378;&#21160; + Lazy + ForEach &#20013;&#30340;&#23376;&#35270;&#22270;&#21487;&#33021;&#26080;&#27861;&#20445;&#25345;&#29366;&#24577;&#8252;&#65039; \n\n&#24403;&#20855;&#22791; lazy &#23646;&#24615;&#30340;&#23481;&#22120;( LazyStack&#12289;LazyGrid&#12289;List) &#20013;&#30340;&#23376;&#35270;&#22270;&#28378;&#21160;&#20986;&#23631;&#24149;&#22806;&#20877;&#28378;&#21160;&#22238;&#26469;&#21518;&#65292;&#21482;&#26377; ForEach &#19979;&#30340;&#31532;&#19968;&#23618;&#23376;&#35270;&#22270;&#21487;&#20197;&#20445;&#25345;&#29366;&#24577;&#65292;&#20854;&#20182;&#23618;&#32423;&#30340;&#35270;&#22270;&#37117;&#26080;&#27861;&#20445;&#25345;&#29366;&#24577;(&#35270;&#22270;&#20250;&#34987;&#37325;&#26032;&#21019;&#24314;&#12289;&#21407;&#26631;&#35782;&#34987;&#25273;&#38500;)\n&#20195;&#30721;&#65306;<a class=\&quot;tweet-url\&quot; href=\&quot;https://github.com/fatbobman/BlogCodes/tree/main/Lazy_ForEach_Bug\&quot;>github.com/fatbobman/Blog&#8230;</a> &quot;,&quot;username&quot;:&quot;fatbobman&quot;,&quot;name&quot;:&quot;fatbobman (&#19996;&#22369;&#32920;&#23376;)&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Wed Sep 21 08:47:06 +0000 2022&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://substackcdn.com/image/upload/w_1028,c_limit,q_auto:best/l_twitter_play_button_rvaygk,w_88/udiasgcp60ihpbbwkevm&quot;,&quot;link_url&quot;:&quot;https://t.co/wozn1AIhuQ&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:3,&quot;like_count&quot;:17,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:&quot;https://video.twimg.com/ext_tw_video/1572507345791651842/pu/vid/512x360/Ono_0hXgtj_9gdGc.mp4?tag=12&quot;,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p><code>onPreferenceChange</code>&nbsp;&#23531;&#22312;&nbsp;<code>.background</code>&nbsp;&#35041;&#26371;&#22750;&#25481;&#65292;&#20294;&#26159;&#25913;&#25104;&#25918;&#22312;&nbsp;<code>.overlay</code>&nbsp;&#35041;&#38754;&#23601;&#27491;&#24120;&#12290;&#36889;&#30495;&#30340;&#39003;&#35206;<a href="https://www.ethanhuang13.com/i/63156466/background-%E8%88%87-overlay">&#25105;&#23565;&#36889;&#20841;&#32773;&#24046;&#30064;&#30340;&#35264;&#24565;</a>&#129327;</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/fatbobman/status/1569863428961075200&quot;,&quot;full_text&quot;:&quot;onPreferenceChange &#22833;&#25928;&#30340;&#38382;&#39064;\n\n&#38271;&#26399;&#20197;&#26469;&#65292;&#24320;&#21457;&#32773;&#20064;&#24815;&#20110;&#22312; background &#20013;&#36890;&#36807; preference &#23558;&#20301;&#32622;&#20449;&#24687;&#36890;&#36807; PreferenceKey &#20256;&#36882;&#32473;&#29238;&#35270;&#22270;&#12290;\n\n&#20294;&#27492;&#26041;&#27861;&#22312;&#26032;&#29256;&#30340; SwiftUI &#19978;&#20250;&#20986;&#29616; onPreferenceChange &#26080;&#27861;&#25910;&#21040;&#20449;&#24687;&#30340;&#24773;&#20917;&#12290;\n\n&#27492;&#26102;&#23558; background &#25913;&#25104; overlay &#21363;&#21487; &quot;,&quot;username&quot;:&quot;fatbobman&quot;,&quot;name&quot;:&quot;fatbobman (&#19996;&#22369;&#32920;&#23376;)&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Wed Sep 14 01:39:42 +0000 2022&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://substackcdn.com/image/upload/w_1028,c_limit,q_auto:best/l_twitter_play_button_rvaygk,w_88/aazmfdw7dkhsqsjiwav6&quot;,&quot;link_url&quot;:&quot;https://t.co/kpHtORbftg&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:4,&quot;like_count&quot;:35,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:&quot;https://video.twimg.com/ext_tw_video/1569863123435421697/pu/vid/384x270/gNWWW06iF6-RC7GI.mp4?tag=12&quot;,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>&#33267;&#26044; SwiftUI &#22312;&#26377; ProMotion &#30340; iPhone &#19978;&#28961;&#27861;&#36948;&#21040; 120 Hz&#65292;&#21487;&#33021;&#21482;&#26159; Apple &#27794;&#26377;&#35373;&#23450;&#22909;&#12290;&#30050;&#31455; iPad Pro &#19978;&#30340; SwiftUI &#19968;&#30452;&#37117;&#21487;&#20197;&#12290;</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/ChristianSelig/status/1574154349521108993&quot;,&quot;full_text&quot;:&quot;Just tested, still no 120 Hz ProMotion with SwiftUI on iOS 16 &#128532; &quot;,&quot;username&quot;:&quot;ChristianSelig&quot;,&quot;name&quot;:&quot;Christian Selig&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Sun Sep 25 21:50:17 +0000 2022&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{&quot;full_text&quot;:&quot;One question with SwiftUI: how do you get it to work with ProMotion/120 Hz? Apple seemingly fixed UIKit in iOS 15.4, but if I try the same project in SwiftUI it only animates at 60 Hz. Am I doing something silly? (This is with the plist key entry)\n\nhttps://t.co/CIHyn8EOcP https://t.co/g17zybMDIr&quot;,&quot;username&quot;:&quot;ChristianSelig&quot;,&quot;name&quot;:&quot;Christian Selig&quot;},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:3,&quot;like_count&quot;:166,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><h2><strong>&#38283;&#30332;&#32773;&#33258;&#25937;&#26371;&#65311;</strong></h2><p>&#26694;&#26550;&#30340; bug &#26377;&#24456;&#22810;&#31278;&#65292;&#20294;&#26368;&#24920;&#30340;&#32943;&#23450;&#26159;&#12300;&#21407;&#26412;&#22909;&#22909;&#30340;&#65292;&#21319;&#32026;&#20043;&#24460;&#23601;&#22750;&#25481;&#20102;&#12301;&#36889;&#31278;&#12290;</p><p>&#25105;&#35498;&#30340;&#26159;&#27491;&#32113;&#30340; API &#20351;&#29992;&#65292;&#27794;&#26377;&#29992; workaround&#65292;&#32780;&#19988;&#38283;&#30332;&#32773;&#20063;&#29992;&#20102;&#26032;&#29256;&#30340; SDK&#12290;&#20294;&#21407;&#26412;&#30340;&#35486;&#27861;&#25110;&#21628;&#21483;&#26041;&#24335;&#65292;&#22312;&#26032;&#30340;&#20316;&#26989;&#31995;&#32113;&#22750;&#25481;&#20102;&#12290;</p><p>SwiftUI &#30446;&#21069;&#22312; iOS 16.0 &#23601;&#26159;&#23660;&#26044;&#36889;&#31278;&#12290;</p><p>&#37027;&#40636;&#21839;&#38988;&#26159;&#65292;&#22312; Apple &#36996;&#27794;&#20462;&#24489;&#30340;&#24773;&#27841;&#19979;&#65292;&#38283;&#30332;&#32773;&#33021;&#22816;&#34389;&#29702;&#36889;&#20123; bug &#21966;&#65311;&#33021;&#32350;&#36942;&#21966;&#65311;</p><p>&#20351;&#29992; UIKit &#30340;&#26178;&#20505;&#65292;&#22914;&#26524;&#26377; bug&#65292;&#36890;&#24120;&#24456;&#22909;&#32350;&#36942;&#12290;&#22240;&#28858;&#38283;&#30332;&#32773;&#26377;&#24456;&#22810;&#25307;&#21487;&#20197;&#20351;&#29992;&#65306;</p><ol><li><p>&#22312; runtime &#25343;&#21040; UIKit &#29289;&#20214;&#30340;&#23526;&#39636;&#65292;&#28982;&#24460;&#37341;&#23565;&#21508;&#31278;&#21443;&#25976;&#36914;&#34892;&#30435;&#25511;&#33287;&#20462;&#25913;&#12290;&#20063;&#23601;&#26159;&#35498;&#65292;&#23448;&#26041;&#30340;&#23526;&#20316;&#26377;&#21839;&#38988;&#65292;&#25105;&#20497;&#23601;&#25226;&#23526;&#38555;&#19978;&#30332;&#29983;&#30340;&#20107;&#24773;&#20877;&#25913;&#25104;&#21029;&#30340;</p></li><li><p>&#24456;&#22810;&#26178;&#20505;&#65292;&#24310;&#24460;&#19968;&#40670;&#26178;&#38291;&#20358;&#35320;&#30332;&#65292;&#20570;&#21040;&#35519;&#25972;&#30059;&#38754;&#26356;&#26032;&#38918;&#24207;&#23601;&#33021;&#35299;&#27770;&#21839;&#38988;&#128524;</p></li></ol><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/ios_memes/status/1159781903559528450&quot;,&quot;full_text&quot;:&quot;It&#8217;ll be our little secret &#129323; &quot;,&quot;username&quot;:&quot;ios_memes&quot;,&quot;name&quot;:&quot;a meme page to check while Xcode is indexing files&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri Aug 09 11:02:08 +0000 2019&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/EBhffdbW4AAKLDn.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/V5eK38OUR0&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:114,&quot;like_count&quot;:535,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><ol start="3"><li><p>&#23531;&#19979;&#32380;&#25215;&#21407;&#26412;&#29289;&#20214;&#30340;&#26032;&#29289;&#20214;&#65292;&#20006;&#19988;&#35206;&#33995;&#26576;&#20123;&#34892;&#28858;&#12290;&#36889;&#26159;&#27161;&#28310;&#30340;&#29289;&#20214;&#23566;&#21521;&#31243;&#24335;&#32102;&#38283;&#30332;&#32773;&#30340;&#33258;&#30001;</p></li></ol><p>&#36889; 1&#12289;3 &#20841;&#20491;&#25216;&#24039;&#20063;&#21487;&#20197;&#32068;&#21512;&#65292;&#27604;&#22914;&#21069;&#32773;&#23601;&#26159;&#22312; runtime &#21487;&#20197;&#12300;&#30475;&#21040;&#12301;UIKit &#30340;&#37096;&#20998;&#23526;&#20316;&#65292;&#25152;&#20197;&#25165;&#35201;&#35206;&#33995;&#21738;&#20123;&#37096;&#20998;&#12290;</p><p>&#20294;&#26159; SwiftUI &#30340;&#23526;&#20316;&#26159;&#30475;&#19981;&#21040;&#30340;&#65292;&#23427;&#30340; API &#25226;&#36889;&#20123;&#32048;&#31680;&#34255;&#36215;&#20358;&#12290;</p><p>&#26356;&#37325;&#35201;&#30340;&#26159;&#65292;&#22240;&#28858; API &#26159;&#23553;&#35037;&#36942;&#30340;&#12290;&#23601;&#31639;&#38283;&#30332;&#32773;&#29992;&#20102;&#21508;&#31278;&#25216;&#24039;&#24471;&#30693;&#26576;&#20491;&#20316;&#26989;&#31995;&#32113;&#29256;&#26412;&#30340;&#23526;&#20316;&#20006;&#21152;&#20197;&#20462;&#25913;&#65292;&#22312;&#19979;&#19968;&#20491;&#29256;&#26412;&#23427;&#34987;&#25913;&#25481;&#30340;&#27231;&#29575;&#36960;&#39640;&#26044; UIKit&#12290;&#36889;&#26041;&#38754;&#21487;&#20197;&#21443;&#35211;&#26412;&#23560;&#27396;&#20043;&#21069;&#30340;&#12300;<a href="https://www.ethanhuang13.com/i/61719362/%E4%B8%8D%E8%A6%81%E4%BD%BF%E7%94%A8-introspect">&#19981;&#35201;&#20351;&#29992; Introspect</a>&#12301;&#12290;</p><p>&#28961;&#22856;&#30340;&#23601;&#26159;&#30446;&#21069;&#26159; Apple &#33258;&#24049;&#25226;&#23526;&#20316;&#25913;&#22750;&#65292;&#38283;&#30332;&#32773;&#38500;&#20102;&#25563;&#20491;&#26041;&#24335;&#23526;&#20316;&#65288;&#27604;&#22914;&#25226;&#37027;&#20491;&#37096;&#20998;&#25913;&#25104;&#29992; UIKit &#20358;&#23531;&#65289;&#65292;&#20063;&#27794;&#21029;&#30340;&#36774;&#27861;&#12290;</p><p>&#26377;&#24456;&#22810;&#38283;&#30332;&#32773;&#22312;&#25104;&#29087;&#30340;&#29986;&#21697;&#19978;&#19981;&#24819;&#29992; SwiftUI&#9472;&#9472;&#38500;&#38750;&#23427;&#26159;&#38283;&#28304;&#30340;&#26694;&#26550;&#9472;&#9472;&#29694;&#22312;&#20320;&#21487;&#20197;&#29702;&#35299;&#32972;&#24460;&#30340;&#21407;&#22240;&#20102;&#12290;&#38364;&#37749;&#23601;&#26159;&#65292;&#22312;&#31995;&#32113;&#26694;&#26550;&#26377; bugs &#30340;&#26178;&#20505;&#65292;&#38283;&#30332;&#32773;&#26377;&#22810;&#23569;&#33258;&#25937;&#31649;&#36947;&#30340;&#21839;&#38988;&#12290;&#21487;&#33021;&#23565;&#26044;&#36889;&#20123;&#38283;&#30332;&#32773;&#20358;&#35498;&#65292;&#21482;&#35201;&#33258;&#24049;&#28961;&#27861;&#21205;&#25163;&#20462;&#25913;&#65292;SwiftUI &#23601;&#21482;&#33021;&#26159;&#29609;&#20855;&#12290;</p><blockquote><p>&#30070;&#28982;&#65292;&#24478;&#21478;&#19968;&#20491;&#35282;&#24230;&#20358;&#35498;&#65292;&#20219;&#20309;&#19968;&#20491;&#34389;&#29702;&#25481;&#24456;&#22810; UIKit &#32048;&#31680;&#27611;&#30149;&#30340; app&#65292;&#35041;&#38754;&#25033;&#35442;&#37117;&#26159;&#20805;&#28415;&#20102; workaround &#25481; Apple bug &#30340;&#31243;&#24335;&#30908;&#127770; &#24819;&#35201;&#26377;&#12300;&#28500;&#30294;&#12301;&#22320;&#20351;&#29992; UIKit &#26159;&#19981;&#21487;&#33021;&#30340;&#65292;&#32780; SwiftUI &#23601;&#26356;&#19981;&#21487;&#33021;&#20102;&#12290;</p></blockquote><h2><strong>&#32080;&#35542;</strong></h2><p>&#25105;&#24819;&#21040; SwiftUI &#30340;&#22353;&#22823;&#27010;&#21487;&#20197;&#20998;&#25104;&#20197;&#19979;&#24190;&#31278;&#24773;&#27841;&#65306;</p><ol><li><p>&#26576;&#20491; API &#35373;&#35336;&#22320;&#19981;&#26159;&#24456;&#22909;&#65292;&#25152;&#20197;&#20320;&#24471;&#29992;&#26576;&#31278;&#19981;&#37027;&#40636;&#29245;&#30340;&#23039;&#21218;&#20351;&#29992;&#23427;</p></li><li><p>&#26576;&#20491; API &#27794;&#26377;&#38283;&#25918;&#33258;&#35330;&#25110;&#21443;&#25976;&#65292;&#25152;&#20197;&#20320;&#24471;&#33258;&#24049;&#37325;&#26032;&#23526;&#20316;</p></li><li><p>&#36889;&#20491; API &#25552;&#20379;&#26032;&#21151;&#33021;&#65292;&#20294;&#26159;&#22312;&#33290;&#29256; OS &#27794;&#26377;&#65292;&#25152;&#20197;&#21482;&#33021;&#31561;&#26032;&#29256; OS &#26178;&#25165;&#33021;&#20351;&#29992;</p></li><li><p>&#26576;&#20491;&#26082;&#26377; API &#22312;&#26032;&#29256; OS &#19978;&#26159;&#22750;&#30340;</p></li></ol><p>&#21069; 3 &#31278;&#22353;&#65292;&#25105;&#35258;&#24471;&#37117;&#33021;&#38568;&#33879;&#38283;&#30332;&#32147;&#39511;&#30340;&#22686;&#38263;&#65292;&#23416;&#26371;&#20778;&#38597;&#22320;&#25033;&#23565;&#12290;&#20294;&#26159;&#20170;&#22825;&#21015;&#20986;&#20358;&#30340;&#21839;&#38988;&#37117;&#26159;&#31532; 4 &#31278;&#21543;&#12290;</p><p><s>&#35712;&#21040;&#36889;&#35041;&#20320;&#21487;&#33021;&#26371;&#24819;&#35498;&#65292;&#36996;&#22909;&#25105;&#36996;&#27794;&#26377;&#38283;&#22987;&#23416; SwiftUI&#12290;</s></p><p>&#26412;&#20358;&#23531;&#36889;&#20491;&#23560;&#27396;&#30340;&#30446;&#30340;&#26159;&#24341;&#36215;&#35712;&#32773;&#23565; SwiftUI &#30340;&#33288;&#36259;&#65292;&#20006;&#19988;&#38477;&#20302;&#23416;&#32722;&#30340;&#38556;&#31001;&#36319;&#28966;&#24942;&#12290;</p><p>&#20294;&#29694;&#22312;&#30340;&#24773;&#27841;&#27604;&#36611;&#20687;&#26159;&#25105;&#20497;&#21482;&#33021;&#35498;&#65292;&#30475;&#30475; iOS 16.1 &#25110;&#26159;&#24460;&#32396;&#29256;&#26412;&#26371;&#19981;&#26371;&#27604;&#36611;&#22909;&#12290;</p><blockquote><p>&#25105;&#20491;&#20154;&#26159;&#19981;&#25265;&#22826;&#22823;&#26399;&#24453;&#23601;&#26159;&#20102;&#127770;</p></blockquote><p>&#38614;&#28982;&#20170;&#22825;&#30340;&#20839;&#23481;&#27794;&#19968;&#21477;&#22909;&#35441;&#65292;&#20294;&#26159;&#25105;&#26368;&#36817;&#36996;&#26159;&#23531;&#20102;&#19981;&#23569; SwiftUI&#65292;&#25645;&#37197; Xcode 14 &#30340; Preview &#26356;&#26032;&#36895;&#24230;&#36996;&#26159;&#28415;&#24841;&#24555;&#30340;&#38283;&#30332;&#39636;&#39511;&#12290;&#20063;&#19981;&#33021;&#35498; SwiftUI &#22312; iOS 16 &#23601;&#23436;&#20840;&#22750;&#25481;&#65292;&#21482;&#26159;&#21839;&#38988;&#27604;&#36611;&#22810;&#12290;</p><p>&#23565;&#26044;&#29087;&#24713; SwiftUI &#30340;&#26379;&#21451;&#36996;&#26159;&#21487;&#20197;&#32380;&#32396;&#29992;&#65292;&#32317;&#20043;&#21738;&#35041;&#26377;&#22353;&#23601;&#36991;&#38283;&#12290;&#32780;&#23565;&#26044;&#21021;&#23416;&#25110;&#22312;&#35264;&#26395;&#30340;&#26379;&#21451;&#65292;&#25105;&#24050;&#32147;&#36319;&#20320;&#35498;&#22353;&#22312;&#21738;&#20102;&#65292;&#21704;&#65281;&#29694;&#38542;&#27573;&#21482;&#33021;&#38477;&#20302;&#23565; SwiftUI &#30340;&#26399;&#24453;&#20102;&#65292;&#36889;&#27171;&#23601;&#19981;&#24597;&#21463;&#20663;&#23475;&#65311;</p><p>&#37027;&#40636;&#20320;&#21487;&#33021;&#26371;&#21839;&#65306;&#12300;&#36889;&#20491;&#19990;&#30028;&#20197;&#24460;&#26371;&#35722;&#22909;&#21966;&#65311;&#25105;&#26159;&#35498; SwiftUI&#12290;&#12301;&#25105;&#29468;&#65292;&#22914;&#26524; Apple &#32380;&#32396;&#29992; UIKit &#20358;&#23526;&#29694; SwiftUI &#30340;&#21151;&#33021;&#65292;&#37027;&#40636;&#29376;&#27841;&#25033;&#35442;&#19981;&#26371;&#35722;&#22909;&#12290;</p><p>&#20294;&#26159;&#26377;&#20491;&#29694;&#35937;&#20540;&#24471;&#35264;&#23519;&#12290;&#20170;&#24180; UIKit &#22312;&nbsp;<code>UITableView</code>&nbsp;&#33287;&nbsp;<code>UICollectionView</code>&nbsp;&#35041;&#26032;&#22686;&#20102;&nbsp;<a href="https://developer.apple.com/documentation/SwiftUI/UIHostingConfiguration">UIHostingConfiguration</a>&nbsp;&#36889;&#20491;&#27231;&#21046;&#65292;&#20063;&#23601;&#26159;&#35731; cell &#30452;&#25509;&#25918;&#20837; SwiftUI &#30340;&nbsp;<code>View</code>&#12290;&#32822;&#65292;&#36889;&#24605;&#36335;&#26159;&#39003;&#20498;&#30340;&#9472;&#9472;&#29992; SwiftUI &#20358;&#23526;&#20316; UIKit&#12290;&#20320;&#35258;&#24471;&#26377;&#24076;&#26395;&#21966;&#65311;</p><p>&#32317;&#20043;&#65292;&#25105;&#36996;&#26159;&#26371;&#23494;&#20999;&#35264;&#23519; SwiftUI &#30340;&#30332;&#23637;&#65292;&#35531;&#32380;&#32396;&#25903;&#25345;&#26412;&#23560;&#27396;&#65374;</p><div><hr></div><p>&#21916;&#27489;&#26412;&#23560;&#27396;&#30340;&#35712;&#32773;&#65292;<strong><a href="https://www.patreon.com/ethanhuang13">&#35531;&#21040; Patreon &#35330;&#38321;</a></strong>&#25903;&#25345;&#25105;&#128591; &#25105;&#30340;&#30446;&#27161;&#26159;&#32047;&#31309;&#21040; 100 &#20301;&#25903;&#25345;&#32773;&#65292;&#30446;&#21069;&nbsp;<strong>28%</strong>&#12290;&#20063;&#35531;&#25353;&#19979;&#24859;&#24515;&#10084;&#65039;&#12289;&#30041;&#35328;&#128172;&#12289;&#22238;&#20449;&#9993;&#65039;&#33287;&#25105;&#20132;&#27969;&#12290;&#36889;&#20123;&#22238;&#39243;&#37117;&#26371;&#30452;&#25509;&#24433;&#38911;&#21040;&#25105;&#32380;&#32396;&#23531;&#20316;&#30340;&#21205;&#21147;&#33287;&#38971;&#29575;&#21908;&#12290;</p><p>&#24076;&#26395;&#20170;&#22825;&#30340;&#20839;&#23481;&#35731;&#20320;&#21487;&#20197;&#23569;&#36208;&#19968;&#20123;&#24398;&#36335;&#12290;&#25105;&#20497;&#19979;&#19968;&#26399;&#35211;&#65281;</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI 專欄 #6 文件工具與網站]]></title><description><![CDATA[SwiftUI &#35712;&#23436;&#23601;&#20837;&#22353; 2022/09/07]]></description><link>https://www.ethanhuang13.com/p/swiftui-6-doc-tools</link><guid isPermaLink="false">https://www.ethanhuang13.com/p/swiftui-6-doc-tools</guid><dc:creator><![CDATA[13]]></dc:creator><pubDate>Tue, 06 Sep 2022 22:00:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!IDto!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ad383-9cd8-44cf-92b5-dcc454203950_3164x2062.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>13 &#30340;&#35441;</strong></p><blockquote><p>SwiftUI &#23560;&#27396;&#26159;&#19968;&#20491;&#25945;&#20320;&#20837;&#22353; SwiftUI &#30340;&#20184;&#36027;&#23560;&#27396;&#12290;&#19981;&#36942;&#25105;&#27794;&#26377;&#35373;&#31435;&#20184;&#36027;&#29254;&#65292;&#32780;&#26159;&#25505;&#29992;&#12300;&#35488;&#23526;&#35330;&#38321;&#12301;&#21046;&#24230;&#12290;</p><p>&#24076;&#26395;&#21487;&#20197;&#32047;&#31309;&#21040; 100 &#20301; <a href="https://www.patreon.com/ethanhuang13">Patreon</a> &#25903;&#25345;&#32773;&#65292;&#30446;&#21069;&#36914;&#24230;&#20358;&#21040; <strong>27%</strong>&#65292;&#24863;&#35613;&#26032;&#33290;&#26379;&#21451;&#20497;&#30340;&#25903;&#25345;&#12290;</p><p>&#22914;&#26524;&#20320;&#26159;&#31532;&#19968;&#27425;&#35712;&#36889;&#20491;&#23560;&#27396;&#65292;&#24314;&#35696;&#20808;<a href="https://www.ethanhuang13.com/p/swiftui-index">&#22238;&#21040;&#30446;&#37636;</a>&#65292;&#29031;&#38918;&#24207;&#38321;&#35712;&#12290;</p><p>&#36889;&#26399;&#20171;&#32057;&#20102;&#19968;&#20123;&#25105;&#26377;&#22312;&#20351;&#29992;&#30340; SwiftUI &#25991;&#20214;&#24037;&#20855;&#33287;&#32178;&#31449;&#65292;&#21487;&#20197;&#35498;&#26159;&#25945;&#20320;&#37347;&#39770;&#12290;</p><p>&#35531;&#35352;&#24471;&#30475;&#21040;&#26368;&#24460;&#65292;&#26377;&#25105;&#24515;&#30446;&#20013;&#30340;&#12300;&#26368;&#20339;&#35299;&#12301;&#21908;&#12290;</p><p>&#65288;<a href="https://www.ethanhuang13.com/p/swiftui-5-look-at-the-body">&#30475;&#21069;&#19968;&#26399;</a> &#183; <a href="https://www.ethanhuang13.com/p/swiftui-index">&#22238;&#23560;&#27396;&#30446;&#37636;</a> &#183; <a href="https://www.ethanhuang13.com/">&#22238;&#39318;&#38913;</a>&#65289;</p></blockquote><div><hr></div><p>&#22909;&#30340;&#25991;&#20214;&#65292;&#23565;&#26044;&#23416;&#32722;&#19968;&#22871;&#31243;&#24335;&#26694;&#26550;&#26159;&#19981;&#21487;&#25110;&#32570;&#30340;&#12290;&#32780;&#35201;&#36889;&#20123;&#26597;&#35426;&#25991;&#20214;&#65292;&#23601;&#38656;&#35201;&#26377;&#36969;&#30070;&#30340;&#24037;&#20855;&#12290;</p><p>&#23565;&#25105;&#20358;&#35498;&#65292;&#20351;&#29992; SwiftUI &#25991;&#20214;&#24037;&#20855;&#65292;&#19981;&#20986;&#36889;&#19977;&#20491;&#30446;&#30340;&#65306;</p><ol><li><p>&#26597;&#35426;&#22914;&#20309;&#20351;&#29992;&#26576;&#20491;&#21151;&#33021;</p></li><li><p>&#28687;&#35261;&#26377;&#21738;&#20123; SwiftUI API &#26159;&#25105;&#36996;&#19981;&#30693;&#36947;&#30340;</p></li><li><p>&#20998;&#20139;&#29305;&#23450; API &#30340;&#36039;&#35338;&#32102;&#20854;&#20182;&#20154;</p></li></ol><p>&#20197;&#19979;&#24037;&#20855;&#33287;&#32178;&#31449;&#65292;&#25105;&#26371;&#20998;&#20139;&#20351;&#29992;&#30340;&#32147;&#39511;&#65292;&#20197;&#21450;&#26377;&#27794;&#26377;&#31526;&#21512;&#25105;&#30340;&#30446;&#30340;&#12290;&#22914;&#26524;&#21916;&#27489;&#30340;&#35441;&#65292;&#36996;&#35531;<a href="https://www.patreon.com/ethanhuang13">&#35330;&#38321;</a>&#25903;&#25345;&#65281;</p><h2><strong><a href="https://developer.apple.com/documentation/swiftui">Apple &#23448;&#32178;</a></strong></h2><p>&#32178;&#22336;&#65306;<a href="https://developer.apple.com/documentation/swiftui">https://developer.apple.com/documentation/swiftui</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IDto!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ad383-9cd8-44cf-92b5-dcc454203950_3164x2062.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IDto!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ad383-9cd8-44cf-92b5-dcc454203950_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!IDto!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ad383-9cd8-44cf-92b5-dcc454203950_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!IDto!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ad383-9cd8-44cf-92b5-dcc454203950_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!IDto!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ad383-9cd8-44cf-92b5-dcc454203950_3164x2062.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IDto!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ad383-9cd8-44cf-92b5-dcc454203950_3164x2062.png" width="1456" height="949" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/d34ad383-9cd8-44cf-92b5-dcc454203950_3164x2062.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:949,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IDto!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ad383-9cd8-44cf-92b5-dcc454203950_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!IDto!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ad383-9cd8-44cf-92b5-dcc454203950_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!IDto!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ad383-9cd8-44cf-92b5-dcc454203950_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!IDto!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ad383-9cd8-44cf-92b5-dcc454203950_3164x2062.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Apple &#23448;&#26041;&#25991;&#20214;&#22312;&#36942;&#21435;&#24120;&#24120;&#34987;&#35436;&#30149;&#65292;&#26377;&#20123;&#26032;&#30340; API &#23436;&#20840;&#27794;&#25991;&#20214;&#65292;&#21482;&#23531;&#20102;&#19968;&#21477;&#12300;No overview available.&#12301;&#12290;&#29978;&#33267;&#36996;&#26377;&#38283;&#30332;&#32773;&#23560;&#38272;&#26550;&#35373; <a href="https://github.com/nooverviewavailable/NoOverviewAvailable.com">nooverviewavailable.com</a>&#65288;&#24050;&#38364;&#31449;&#65289;&#35519;&#20355;&#27492;&#20107;&#12290;SwiftUI &#26089;&#26399;&#30340;&#25991;&#20214;&#20063;&#26159;&#24456;&#36007;&#20047;&#65292;&#35377;&#22810;&#21151;&#33021;&#37117;&#19981;&#30693;&#36947;&#24590;&#40636;&#20351;&#29992;&#12290;</p><p>&#20294;&#26368;&#36817;&#24190;&#24180; Apple &#22312; SwiftUI &#25991;&#20214;&#19979;&#20102;&#33510;&#24037;&#65292;&#24456;&#22810;&#20803;&#20214;&#29978;&#33267;&#25552;&#20379;&#20102;&#25130;&#22294;&#12290;</p><p>&#20170;&#24180; Apple &#23448;&#32178;&#30340;&#25991;&#20214;&#36996;&#20570;&#20102;&#19968;&#27425;&#25913;&#29256;&#65292;&#35722;&#25104;&#24038;&#37002;&#26377;&#20491;&#30446;&#37636;&#12290;&#36319; Xcode &#20839;&#24314;&#30340;&#25991;&#20214;&#28687;&#35261;&#22120;&#36234;&#20358;&#36234;&#20687;&#12290;</p><p>&#38614;&#28982;&#20839;&#23481;&#30475;&#36215;&#20358;&#24456;&#35920;&#23500;&#65292;&#20294;&#26159;&#22909;&#19981;&#22909;&#25214;&#36039;&#26009;&#21602;&#65311;</p><p>&#31777;&#21934;&#21028;&#26039; SwiftUI &#25991;&#20214;&#26597;&#35426;&#33021;&#21147;&#30340;&#26041;&#24335;&#65292;&#23601;&#26159;&#36664;&#20837;&#12300;Text&#12301;&#65292;&#30475;&#30475;&#26371;&#25214;&#21040;&#20160;&#40636;&#12290;&#30050;&#31455;&#36889;&#26159;&#19968;&#20491;&#24456;&#24120;&#35211;&#30340;&#20803;&#20214;&#65292;&#32780;&#19988;&#26377;&#35377;&#22810;&#20351;&#29992;&#26041;&#24335;&#12290;</p><p>&#24456;&#36986;&#25022;&#30340;&#26159;&#65292;&#36664;&#20837;&#12300;Text&#12301;&#20043;&#24460;&#26371;&#25214;&#21040;&#25104;&#21315;&#19978;&#33836;&#30340; init function&#12290;&#30475;&#30475;&#36889;&#28961;&#25973;&#38263;&#30340;&#25458;&#36600;&#65292;&#23436;&#20840;&#19981;&#23526;&#29992;&#22043;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!j3_K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6a4d31c-d1d3-4be5-a750-c2a71b9768c0_2940x1838.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j3_K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6a4d31c-d1d3-4be5-a750-c2a71b9768c0_2940x1838.png 424w, https://substackcdn.com/image/fetch/$s_!j3_K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6a4d31c-d1d3-4be5-a750-c2a71b9768c0_2940x1838.png 848w, https://substackcdn.com/image/fetch/$s_!j3_K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6a4d31c-d1d3-4be5-a750-c2a71b9768c0_2940x1838.png 1272w, https://substackcdn.com/image/fetch/$s_!j3_K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6a4d31c-d1d3-4be5-a750-c2a71b9768c0_2940x1838.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!j3_K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6a4d31c-d1d3-4be5-a750-c2a71b9768c0_2940x1838.png" width="1456" height="910" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/a6a4d31c-d1d3-4be5-a750-c2a71b9768c0_2940x1838.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:910,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!j3_K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6a4d31c-d1d3-4be5-a750-c2a71b9768c0_2940x1838.png 424w, https://substackcdn.com/image/fetch/$s_!j3_K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6a4d31c-d1d3-4be5-a750-c2a71b9768c0_2940x1838.png 848w, https://substackcdn.com/image/fetch/$s_!j3_K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6a4d31c-d1d3-4be5-a750-c2a71b9768c0_2940x1838.png 1272w, https://substackcdn.com/image/fetch/$s_!j3_K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6a4d31c-d1d3-4be5-a750-c2a71b9768c0_2940x1838.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#27794;&#38364;&#20418;&#65292;&#25105;&#20497;&#21487;&#20197;&#24478; Google &#25214;&#128514;</p><p>&#23448;&#32178;&#25991;&#20214;&#26368;&#22823;&#30340;&#22909;&#34389;&#23601;&#26159;&#26377;&#27161;&#28310;&#30340;&#32178;&#22336;&#65292;&#29992;&#28687;&#35261;&#22120;&#23601;&#21487;&#20197;&#38321;&#35712;&#12290;&#36969;&#21512;&#20998;&#20139;&#12290;</p><p>&#25152;&#20197;&#65292;&#21363;&#20351;&#20839;&#24314;&#25628;&#23563;&#21151;&#33021;&#31561;&#26044;&#27794;&#26377;&#65292;&#22914;&#26524;&#25214;&#24471;&#21040;&#29305;&#23450; API &#30340;&#38913;&#38754;&#65292;&#36996;&#26159;&#26371;&#25104;&#28858;&#25105;&#35469;&#23450;&#30340;&#12300;&#27402;&#23041;&#25991;&#20214;&#12301;&#12290;</p><p>&#23448;&#32178;&#30340;&#25991;&#20214;&#20063;&#19968;&#23450;&#26371;&#21253;&#21547; Beta &#29256;&#65292;&#29978;&#33267;&#36996;&#26377; API Changes &#30340;&#36984;&#21934;&#21487;&#20197;&#20999;&#25563;&#39023;&#31034;&#12290;&#23565;&#26044;&#24819;&#30693;&#36947;&#26368;&#26032;&#35722;&#21270;&#30340;&#20154;&#20358;&#35498;&#65292;&#26377;&#19968;&#23450;&#30340;&#24171;&#21161;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nCvt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fab9c3800-0d0a-4fd3-8904-b665bd47027d_3164x2062.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nCvt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fab9c3800-0d0a-4fd3-8904-b665bd47027d_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!nCvt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fab9c3800-0d0a-4fd3-8904-b665bd47027d_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!nCvt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fab9c3800-0d0a-4fd3-8904-b665bd47027d_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!nCvt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fab9c3800-0d0a-4fd3-8904-b665bd47027d_3164x2062.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nCvt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fab9c3800-0d0a-4fd3-8904-b665bd47027d_3164x2062.png" width="1456" height="949" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ab9c3800-0d0a-4fd3-8904-b665bd47027d_3164x2062.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:949,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nCvt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fab9c3800-0d0a-4fd3-8904-b665bd47027d_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!nCvt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fab9c3800-0d0a-4fd3-8904-b665bd47027d_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!nCvt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fab9c3800-0d0a-4fd3-8904-b665bd47027d_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!nCvt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fab9c3800-0d0a-4fd3-8904-b665bd47027d_3164x2062.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Xcode &#20839;&#24314;&#25991;&#20214;&#28687;&#35261;&#22120;</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Aktl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F39ffe6b9-afba-4921-82e3-22dbec45ae92_3164x2062.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Aktl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F39ffe6b9-afba-4921-82e3-22dbec45ae92_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!Aktl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F39ffe6b9-afba-4921-82e3-22dbec45ae92_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!Aktl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F39ffe6b9-afba-4921-82e3-22dbec45ae92_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!Aktl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F39ffe6b9-afba-4921-82e3-22dbec45ae92_3164x2062.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Aktl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F39ffe6b9-afba-4921-82e3-22dbec45ae92_3164x2062.png" width="1456" height="949" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/39ffe6b9-afba-4921-82e3-22dbec45ae92_3164x2062.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:949,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Aktl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F39ffe6b9-afba-4921-82e3-22dbec45ae92_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!Aktl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F39ffe6b9-afba-4921-82e3-22dbec45ae92_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!Aktl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F39ffe6b9-afba-4921-82e3-22dbec45ae92_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!Aktl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F39ffe6b9-afba-4921-82e3-22dbec45ae92_3164x2062.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#25171;&#38283; Xcode &#20197;&#24460;&#65292;&#24478; Window &#36984;&#21934;&#25214;&#21040;&#12300;Developer Documentation&#12301;&#23601;&#26159;&#20102;&#12290;&#25110;&#26159;&#25353; <code>Cmd + Shift + 0</code>&#12290;</p><p>&#23601;&#25105;&#20491;&#20154;&#30340;&#32722;&#24931;&#20358;&#35498;&#65292;&#24478; Xcode &#30475; SwiftUI &#25991;&#20214;&#65292;&#19981;&#26159;&#24456;&#23526;&#29992;&#12290;&#21407;&#22240;&#26159;&#65306;</p><ol><li><p>&#24517;&#38920;&#35201;&#38283;&#21855; Xcode &#25165;&#33021;&#30475;&#12290;</p></li><li><p>&#25991;&#20214;&#29256;&#26412;&#32129;&#23450;&#30446;&#21069;&#30340; Xcode &#29256;&#26412;&#12290;&#25563;&#35328;&#20043;&#65292;&#27491;&#24335;&#29256; Xcode &#30475;&#19981;&#21040; Beta SwiftUI &#30340; API&#12290;</p></li></ol><p>&#19981;&#36942;&#65292;&#33267;&#23569;&#23427;&#30340;&#25628;&#23563;&#21151;&#33021;&#27604;&#23448;&#32178;&#23526;&#29992;&#22810;&#20102;&#12290;</p><p>&#36664;&#20837;&#12300;Text&#12301;&#20197;&#24460;&#21487;&#20197;&#30475;&#21040; <code>Text</code>&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bqov!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a63d93-7296-4129-9f5f-b97fb6dd26c1_3164x2062.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bqov!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a63d93-7296-4129-9f5f-b97fb6dd26c1_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!bqov!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a63d93-7296-4129-9f5f-b97fb6dd26c1_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!bqov!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a63d93-7296-4129-9f5f-b97fb6dd26c1_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!bqov!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a63d93-7296-4129-9f5f-b97fb6dd26c1_3164x2062.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bqov!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a63d93-7296-4129-9f5f-b97fb6dd26c1_3164x2062.png" width="1456" height="949" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/a3a63d93-7296-4129-9f5f-b97fb6dd26c1_3164x2062.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:949,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bqov!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a63d93-7296-4129-9f5f-b97fb6dd26c1_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!bqov!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a63d93-7296-4129-9f5f-b97fb6dd26c1_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!bqov!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a63d93-7296-4129-9f5f-b97fb6dd26c1_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!bqov!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a63d93-7296-4129-9f5f-b97fb6dd26c1_3164x2062.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#27492;&#22806;&#65292;&#24478;&#20998;&#20139;&#25353;&#37397;&#20063;&#21487;&#20197;&#35079;&#35069;&#23565;&#25033;&#30340;&#23448;&#32178;&#32178;&#22336;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JPq4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c0cce31-fb3e-43cb-96cf-0c97f20e92a1_398x450.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JPq4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c0cce31-fb3e-43cb-96cf-0c97f20e92a1_398x450.png 424w, https://substackcdn.com/image/fetch/$s_!JPq4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c0cce31-fb3e-43cb-96cf-0c97f20e92a1_398x450.png 848w, https://substackcdn.com/image/fetch/$s_!JPq4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c0cce31-fb3e-43cb-96cf-0c97f20e92a1_398x450.png 1272w, https://substackcdn.com/image/fetch/$s_!JPq4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c0cce31-fb3e-43cb-96cf-0c97f20e92a1_398x450.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JPq4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c0cce31-fb3e-43cb-96cf-0c97f20e92a1_398x450.png" width="398" height="450" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/8c0cce31-fb3e-43cb-96cf-0c97f20e92a1_398x450.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:398,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JPq4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c0cce31-fb3e-43cb-96cf-0c97f20e92a1_398x450.png 424w, https://substackcdn.com/image/fetch/$s_!JPq4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c0cce31-fb3e-43cb-96cf-0c97f20e92a1_398x450.png 848w, https://substackcdn.com/image/fetch/$s_!JPq4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c0cce31-fb3e-43cb-96cf-0c97f20e92a1_398x450.png 1272w, https://substackcdn.com/image/fetch/$s_!JPq4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c0cce31-fb3e-43cb-96cf-0c97f20e92a1_398x450.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong><a href="https://swiftontap.com/">SwiftOnTap</a></strong></h2><p>&#32178;&#22336;&#65306;</p><p>https://swiftontap.com/</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vMTA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb4f693-b571-4f41-84b3-e58697684be0_3164x2062.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vMTA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb4f693-b571-4f41-84b3-e58697684be0_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!vMTA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb4f693-b571-4f41-84b3-e58697684be0_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!vMTA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb4f693-b571-4f41-84b3-e58697684be0_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!vMTA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb4f693-b571-4f41-84b3-e58697684be0_3164x2062.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vMTA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb4f693-b571-4f41-84b3-e58697684be0_3164x2062.png" width="1456" height="949" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/cdb4f693-b571-4f41-84b3-e58697684be0_3164x2062.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:949,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vMTA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb4f693-b571-4f41-84b3-e58697684be0_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!vMTA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb4f693-b571-4f41-84b3-e58697684be0_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!vMTA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb4f693-b571-4f41-84b3-e58697684be0_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!vMTA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb4f693-b571-4f41-84b3-e58697684be0_3164x2062.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>SwiftOnTap &#26159;&#25105;&#36942;&#21435;&#26368;&#21916;&#24859;&#30340; SwiftUI &#25991;&#20214;&#32178;&#31449;&#12290;</p><p>&#23427;&#30340;&#20778;&#40670;&#24456;&#26126;&#39023;&#65306;</p><ol><li><p>&#25552;&#20379;&#30456;&#30070;&#19981;&#37679;&#30340;&#25628;&#23563;&#21151;&#33021;</p></li><li><p>&#20998;&#39006;&#32034;&#24341;&#19968;&#30446;&#20102;&#28982;&#65292;&#21487;&#20197;&#24456;&#28165;&#26970;&#30693;&#36947;&#26377;&#21738;&#20123; API</p></li><li><p>&#26377;&#25552;&#20379;&#25130;&#22294;&#31684;&#20363;&#12290;&#36889;&#27604; Apple &#23448;&#26041;&#25991;&#20214;&#26089;&#20102;&#19968;&#12289;&#20841;&#24180;&#23601;&#20570;&#21040;</p></li></ol><p>&#20294;&#26159;&#23427;&#26377;&#24456;&#26126;&#39023;&#30340;&#32570;&#40670;&#65292;&#25152;&#20197;&#25105;&#29694;&#22312;&#28961;&#27861;&#25512;&#34214;&#32102;&#22823;&#23478;&#65306;</p><ol><li><p>&#30001;<a href="https://github.com/SwiftOnTap/Docs">&#31038;&#32676;&#32173;&#35703;</a>&#65292;&#28310;&#30906;&#24615;&#36319;&#26356;&#26032;&#31243;&#24230;&#26377;&#21839;&#38988;&#12290;iOS 15 &#20197;&#24460;&#30340;&#36039;&#35338;&#22522;&#26412;&#19978;&#37117;&#19981;&#22312;&#35041;&#38754;</p></li><li><p>&#19981;&#30693;&#36947;&#20160;&#40636;&#26178;&#20505;&#26371;&#38364;&#31449;&#12290;&#24190;&#20491;&#26376;&#21069;&#65292;&#32173;&#35703;&#32773;&#22312;&#39318;&#38913;&#32882;&#26126;&#65306;&#22914;&#26524;&#27794;&#26377;&#25424;&#27454;&#25903;&#25345;&#30340;&#35441;&#65292;&#38928;&#35336;&#20170;&#24180; 8/31 &#26371;&#38364;&#38281;&#65288;&#26178;&#38291;&#24050;&#36942;&#65289;&#12290;&#25105;&#19981;&#28165;&#26970;&#28858;&#20309;&#27599;&#26376;&#12300;&#20677;&#26377;&#12301;40,000 &#20154;&#27425;&#30340;&#32178;&#31449;&#38656;&#35201; $400 &#32654;&#37329;&#25165;&#33021;&#32380;&#32396;&#25552;&#20379;&#26381;&#21209;&#12290;</p></li></ol><p>&#20854;&#23526;&#65292;&#35731;&#25105;&#26368;&#22256;&#25854;&#30340;&#36996;&#26159;&#35442;&#32178;&#31449;&#32173;&#35703;&#32773;&#30340;&#24907;&#24230;&#12290;</p><p>&#27794;&#26377;&#31309;&#26997;&#32173;&#35703;&#36889;&#40670;&#25105;&#21487;&#20197;&#25509;&#21463;&#65292;&#30050;&#31455;&#36889;&#26159;&#20214;&#21507;&#21147;&#19981;&#35342;&#22909;&#30340;&#20107;&#12290;&#20294;&#26159;&#27794;&#26377;&#22312;&#39318;&#38913;&#32882;&#26126;&#25991;&#20214;&#30340;&#29256;&#26412;&#25110;&#26356;&#26032;&#36039;&#35338;&#65292;&#20197;&#33267;&#26044;&#25105;&#29992;&#20102;&#24456;&#20037;&#25165;&#30332;&#29694;&#35041;&#38754;&#26681;&#26412;&#27794;&#26377; iOS 15 &#30340; API&#12290;&#25105;&#30456;&#20449;&#35442;&#32178;&#31449;&#30340;&#19978;&#33836;&#20351;&#29992;&#32773;&#20013;&#65292;&#20063;&#26377;&#19981;&#23569;&#20154;&#36319;&#25105;&#19968;&#27171;&#33853;&#20837;&#36889;&#27171;&#30340;&#22353;&#12290;</p><h2><strong><a href="https://mackuba.eu/swiftui/changelog">MacBuka&#8217;s SwiftUI Index</a></strong></h2><p>&#32178;&#22336;&#65306;<a href="https://mackuba.eu/swiftui/changelog">https://mackuba.eu/swiftui/changelog</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xDe1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5632b583-a318-47ca-a790-81415efaaeaa_3164x2062.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xDe1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5632b583-a318-47ca-a790-81415efaaeaa_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!xDe1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5632b583-a318-47ca-a790-81415efaaeaa_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!xDe1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5632b583-a318-47ca-a790-81415efaaeaa_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!xDe1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5632b583-a318-47ca-a790-81415efaaeaa_3164x2062.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xDe1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5632b583-a318-47ca-a790-81415efaaeaa_3164x2062.png" width="1456" height="949" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5632b583-a318-47ca-a790-81415efaaeaa_3164x2062.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:949,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xDe1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5632b583-a318-47ca-a790-81415efaaeaa_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!xDe1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5632b583-a318-47ca-a790-81415efaaeaa_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!xDe1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5632b583-a318-47ca-a790-81415efaaeaa_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!xDe1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5632b583-a318-47ca-a790-81415efaaeaa_3164x2062.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#36889;&#20491;&#32178;&#38913;&#26159;&#38283;&#30332;&#32773; Kuba Suder &#22312;&#20170;&#24180;&#24314;&#31435;&#30340;&#12290;</p><p>&#29305;&#33394;&#26159;&#25226; SwiftUI API &#20381;&#29031;&#25512;&#20986;&#30340;&#29256;&#26412;&#65288;&#24180;&#20221;&#65289;&#25490;&#21015;&#65292;&#24314;&#31435;&#25104;&#32034;&#24341;&#12290;&#23565;&#26044;&#20102;&#35299;&#26368;&#26032; API &#26377;&#21738;&#20123;&#65292;&#25110;&#26159;&#26597;&#35426;&#21521;&#19979;&#30456;&#23481;&#38750;&#24120;&#26041;&#20415;&#12290;</p><p>&#27599;&#20491;&#38917;&#30446;&#40670;&#19979;&#21435;&#37117;&#26159;&#36899;&#21040;&#23448;&#32178;&#12290;&#21487;&#20197;&#35498;&#26159;<strong>&#23448;&#32178;&#32034;&#24341;&#30340;&#21152;&#24375;&#29256;</strong>&#12290;</p><p>Kuba &#29978;&#33267;&#25972;&#29702;&#21040;&#21508; Beta &#29256;&#30340;&#24046;&#30064;&#12290;&#20687;&#26159; iOS 16 Beta 3 &#23601;&#25512;&#20986;&#20102;&#19968;&#22534;&#26032;&#30340;&#12289;WWDC &#27794;&#25552;&#21040;&#30340; API&#12290;Beta 2 &#33287; 4 &#20063;&#26377;&#23569;&#37327;&#26032;&#22686;&#65292;&#26356;&#21029;&#35498; Beta 1 &#30340;&#22823;&#37327; API&#12290;&#38750;&#24120;&#25512;&#34214;&#21508;&#20301;&#21435;&#32763;&#19968;&#19979;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Yzem!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586c597-998e-483a-b742-fc7246360458_3164x2062.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Yzem!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586c597-998e-483a-b742-fc7246360458_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!Yzem!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586c597-998e-483a-b742-fc7246360458_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!Yzem!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586c597-998e-483a-b742-fc7246360458_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!Yzem!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586c597-998e-483a-b742-fc7246360458_3164x2062.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Yzem!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586c597-998e-483a-b742-fc7246360458_3164x2062.png" width="1456" height="949" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/c586c597-998e-483a-b742-fc7246360458_3164x2062.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:949,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Yzem!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586c597-998e-483a-b742-fc7246360458_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!Yzem!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586c597-998e-483a-b742-fc7246360458_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!Yzem!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586c597-998e-483a-b742-fc7246360458_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!Yzem!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc586c597-998e-483a-b742-fc7246360458_3164x2062.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#32178;&#31449;&#26159;&#22312;&#19968;&#38913;&#35041;&#38754;&#21015;&#20986;&#25152;&#26377;&#30340; type&#12289;modifier&#12289;property wrapper&#12289;environment key &#31561;&#31561;&#65292;&#25152;&#20197;&#21487;&#20197;&#29992;&#28687;&#35261;&#22120;&#30340;&#20840;&#25991;&#25628;&#23563;&#65292;&#20063;&#21487;&#20197;&#29992;&#23427;&#25552;&#20379;&#30340;&#25628;&#23563;&#26694;&#12290;&#19981;&#36942;&#36664;&#20837;&#12300;Text&#12301;&#20173;&#28982;&#26371;&#25214;&#21040;&#19968;&#22534;&#19981;&#30456;&#24178;&#30340;&#26481;&#35199;&#12290;</p><p>&#20320;&#20063;&#21487;&#20197;&#29031;&#20027;&#38988;&#20998;&#39006;&#20358;&#28687;&#35261;&#12290;&#23565;&#26044;&#24819;&#25226; SwiftUI &#20840;&#37096;&#21151;&#33021;&#25110;&#26159;&#38364;&#37749;&#23383;&#37117;&#30475;&#36942;&#19968;&#36941;&#30340;&#20154;&#20358;&#35498;&#65292;&#25105;&#35258;&#24471;&#26159;&#24456;&#19981;&#37679;&#30340;&#32178;&#31449;&#12290;</p><p>&#19981;&#36942; Kuba &#26159;&#21542;&#26371;&#22949;&#21892;&#32173;&#35703;&#65292;&#36996;&#26159;&#26371;&#20687; SwiftOnTap &#37027;&#27171;&#65292;&#26126;&#24180; SwiftUI &#26356;&#26032;&#26178;&#24471;&#30041;&#24847;&#19968;&#19979;&#12290;</p><h2><strong><a href="https://swiftui-lab.com/companion/">SwiftUI Companion</a></strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AAoM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7adf7e1-73bf-462a-889f-f66d0acfc4fd_3164x2062.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AAoM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7adf7e1-73bf-462a-889f-f66d0acfc4fd_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!AAoM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7adf7e1-73bf-462a-889f-f66d0acfc4fd_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!AAoM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7adf7e1-73bf-462a-889f-f66d0acfc4fd_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!AAoM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7adf7e1-73bf-462a-889f-f66d0acfc4fd_3164x2062.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AAoM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7adf7e1-73bf-462a-889f-f66d0acfc4fd_3164x2062.png" width="1456" height="949" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/e7adf7e1-73bf-462a-889f-f66d0acfc4fd_3164x2062.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:949,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AAoM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7adf7e1-73bf-462a-889f-f66d0acfc4fd_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!AAoM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7adf7e1-73bf-462a-889f-f66d0acfc4fd_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!AAoM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7adf7e1-73bf-462a-889f-f66d0acfc4fd_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!AAoM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7adf7e1-73bf-462a-889f-f66d0acfc4fd_3164x2062.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://swiftui-lab.com/">The SwiftUI Lab</a> &#36889;&#20491;&#32178;&#31449;&#25512;&#20986;&#30340; <a href="https://swiftui-lab.com/companion/">A Companion for SwiftUI</a> app &#26159;&#20491;&#35201;&#20729; $50 &#32654;&#37329;&#25110; $1690 &#26032;&#21488;&#24163;&#30340;&#25991;&#20214;&#25033;&#29992;&#31243;&#24335;&#12290;&#22312; <a href="https://apps.apple.com/tw/app/a-companion-for-swiftui/id1485436674?mt=12">Mac App Store</a> &#19978;&#35413;&#20998;&#24456;&#39640;&#12290;</p><blockquote><p>&#25105;&#26159;&#29992;&#21508;&#20301;&#20184;&#36027;&#35712;&#32773;&#30340;&#35330;&#38321;&#36027;&#29992;&#36092;&#36023;&#30340;&#65292;&#22312;&#27492;&#29305;&#21029;&#24863;&#35613;&#25903;&#25345;&#128591;</p></blockquote><p>&#20294;&#26159;&#20316;&#28858;&#25991;&#20214;&#24037;&#20855;&#30340;&#35441;&#65292;&#25105;&#19981;&#35258;&#24471;&#22909;&#29992;&#65292;&#36319;&#25105;&#30340;&#38656;&#27714;&#19981;&#31526;&#21512;&#12290;</p><p>&#39318;&#20808;&#65292;&#23427;&#24456;&#38627;&#26597;&#35426;&#36039;&#26009;&#12290;&#36664;&#20837;&#12300;Text&#12301;&#30340;&#25928;&#26524;&#27604; Apple &#23448;&#32178;&#22909;&#19981;&#21040;&#21738;&#35041;&#21435;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_Jta!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3cac672e-b66c-43e1-8448-3aad5b3b30c6_3164x2062.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_Jta!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3cac672e-b66c-43e1-8448-3aad5b3b30c6_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!_Jta!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3cac672e-b66c-43e1-8448-3aad5b3b30c6_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!_Jta!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3cac672e-b66c-43e1-8448-3aad5b3b30c6_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!_Jta!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3cac672e-b66c-43e1-8448-3aad5b3b30c6_3164x2062.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_Jta!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3cac672e-b66c-43e1-8448-3aad5b3b30c6_3164x2062.png" width="1456" height="949" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/3cac672e-b66c-43e1-8448-3aad5b3b30c6_3164x2062.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:949,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_Jta!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3cac672e-b66c-43e1-8448-3aad5b3b30c6_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!_Jta!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3cac672e-b66c-43e1-8448-3aad5b3b30c6_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!_Jta!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3cac672e-b66c-43e1-8448-3aad5b3b30c6_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!_Jta!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3cac672e-b66c-43e1-8448-3aad5b3b30c6_3164x2062.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#20854;&#27425;&#65292;&#23427;&#30340;&#20839;&#23481;&#23436;&#20840;&#21462;&#33258;&#26044; SwiftUI Lab &#30740;&#31350; SwiftUI &#30340;&#25945;&#23416;&#25991;&#31456;&#65292;&#32780;&#19981;&#26159;&#25220;&#33258;&#23448;&#32178;&#12290;&#32232;&#25490;&#12289;&#25944;&#36848;&#12289;&#31684;&#20363;&#31243;&#24335;&#30908;&#65292;&#37117;&#26159;&#33258;&#25104;&#19968;&#26684;&#12290;&#25152;&#20197;&#26159;&#36628;&#21161;&#23416;&#32722;&#65292;&#32780;&#38750;&#12300;&#27402;&#23041;&#25991;&#20214;&#12301;&#12290;</p><p>&#26377;&#36889;&#27171;&#30340;&#36628;&#21161;&#23416;&#32722;&#25945;&#26448;&#20006;&#19981;&#26159;&#22750;&#20107;&#12290;&#21839;&#38988;&#26159;&#65292;&#23427;&#27794;&#26377;&#25171;&#38283;&#23565;&#25033;&#23448;&#32178;&#38913;&#38754;&#30340;&#21151;&#33021;&#65288;&#19981;&#28165;&#26970;&#21407;&#22240;&#65292;&#21487;&#33021;&#26159;&#24597; Apple &#19981;&#32102;&#19978;&#26550; Mac App Store&#65311;&#65289;&#65292;&#25152;&#20197;&#25105;&#22914;&#26524;&#35201;&#27604;&#36611;&#20841;&#37002;&#30340;&#23531;&#27861;&#65292;&#24471;&#33258;&#24049;&#29992;&#20854;&#20182;&#26041;&#24335;&#25171;&#38283;&#23448;&#26041;&#25991;&#20214;&#12290;</p><p>&#26368;&#24460;&#23601;&#26371;&#35722;&#25104;&#65306;&#26082;&#28982;&#25105;&#26368;&#24460;&#36996;&#26159;&#35201;&#30475;&#23448;&#26041;&#25991;&#20214;&#65292;&#37027;&#25105;&#23601;&#25078;&#24471;&#38283; Companion &#20102;&#12290;</p><p>Companion &#26159;&#24456;&#21426;&#23475;&#30340; SwiftUI &#30740;&#31350;&#32080;&#26230;&#65292;&#35041;&#38754;&#26377;&#24456;&#22810;&#31684;&#20363;&#31243;&#24335;&#30908;&#65292;&#20197;&#21450;&#24478;&#33287;&#23448;&#26041;&#19981;&#21516;&#30340;&#35282;&#24230;&#20358;&#35299;&#37323; API &#30340;&#35498;&#26126;&#65292;&#29978;&#33267;&#36996;&#26377;&#19968;&#37749;&#25171;&#38283; Playground &#27284;&#26696;&#30340;&#21151;&#33021;&#12290;</p><p>&#23565;&#26044;&#23416;&#32722; SwiftUI &#20358;&#35498;&#65292;&#25110;&#35377;&#26159;&#20491;&#19981;&#37679;&#30340;&#25945;&#26448;&#12290;&#20854;&#20839;&#23481;&#20063;&#23436;&#20840;&#23565;&#24471;&#36215;&#20729;&#26684;&#12290;</p><p>&#20294;&#26159;&#22914;&#26524;&#35201;&#30070;&#20316;&#25991;&#20214;&#24037;&#20855;&#20358;&#29992;&#30340;&#35441;&#65292;&#20197;&#25105;&#30340;&#27161;&#28310;&#26159;&#19981;&#21512;&#26684;&#30340;&#12290;&#30070;&#20241;&#38290;&#26360;&#20358;&#35712;&#12289;&#20102;&#35299; API &#30340;&#21151;&#33021;&#65292;&#20498;&#26159;&#19981;&#37679;&#12290;</p><p>&#22914;&#26524;&#33021;&#22686;&#21152;&#36899;&#32080;&#21040;&#23448;&#32178;&#30340;&#21151;&#33021;&#65292;&#23601;&#22826;&#22909;&#20102;&#12290;</p><h2><strong><a href="https://kapeli.com/dash">Dash</a></strong></h2><p>&#23448;&#32178;&#65306;<a href="https://kapeli.com/dash">https://kapeli.com/dash</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!L5vC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F24607b52-bdbc-4450-86db-03e0aa38b1e6_3164x2062.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!L5vC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F24607b52-bdbc-4450-86db-03e0aa38b1e6_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!L5vC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F24607b52-bdbc-4450-86db-03e0aa38b1e6_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!L5vC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F24607b52-bdbc-4450-86db-03e0aa38b1e6_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!L5vC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F24607b52-bdbc-4450-86db-03e0aa38b1e6_3164x2062.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!L5vC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F24607b52-bdbc-4450-86db-03e0aa38b1e6_3164x2062.png" width="1456" height="949" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/24607b52-bdbc-4450-86db-03e0aa38b1e6_3164x2062.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:949,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!L5vC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F24607b52-bdbc-4450-86db-03e0aa38b1e6_3164x2062.png 424w, https://substackcdn.com/image/fetch/$s_!L5vC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F24607b52-bdbc-4450-86db-03e0aa38b1e6_3164x2062.png 848w, https://substackcdn.com/image/fetch/$s_!L5vC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F24607b52-bdbc-4450-86db-03e0aa38b1e6_3164x2062.png 1272w, https://substackcdn.com/image/fetch/$s_!L5vC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F24607b52-bdbc-4450-86db-03e0aa38b1e6_3164x2062.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Dash &#26159;&#30693;&#21517;&#30340; Mac &#25991;&#20214;&#24037;&#20855;&#65292;&#25903;&#25588;&#36229;&#36942; 200 &#31278;&#25991;&#20214;&#65292;&#30070;&#28982;&#20063;&#21253;&#25324; Apple &#30340;&#38283;&#30332;&#32773;&#25991;&#20214;&#12290;</p><p>&#20316;&#28858; SwiftUI &#25991;&#20214;&#24037;&#20855;&#65292;&#25105;&#35258;&#24471; Dash &#30456;&#30070;&#22909;&#29992;&#65292;&#20063;&#26159;&#25105;&#24179;&#26178;&#26368;&#20778;&#20808;&#26371;&#36984;&#25799;&#30340;&#24037;&#20855;&#12290;</p><p>&#39318;&#20808;&#65292;&#23427;&#30340;&#25991;&#20214;&#24235;&#26159;&#24478; Xcode &#20358;&#30340;&#65292;&#32780;&#19988;&#25903;&#25588; Beta &#29256;&#12290;&#21482;&#35201;&#19979;&#36617;&#26032;&#30340; Xcode&#65292;Dash &#35041;&#30340;&#25991;&#20214;&#24235;&#23601;&#21487;&#20197;&#26356;&#26032;&#12290;&#22312;&#26597;&#35426;&#26178;&#65292;&#23601;&#19981;&#38656;&#35201;&#38283;&#21855;&#29305;&#23450;&#29256;&#26412; Xcode&#12290;&#36889;&#40670;&#27604; Xcode &#20839;&#24314;&#30340;&#25991;&#20214;&#28687;&#35261;&#22120;&#26041;&#20415;&#19981;&#23569;&#12290;</p><p>&#32780;&#19988;&#65292;&#30001;&#26044;&#25991;&#20214;&#24235;&#26159;&#24478; Xcode &#20358;&#65292;&#25152;&#20197;&#20320;&#21487;&#20197;&#38626;&#32218;&#26597;&#35426;&#12290;&#36889;&#40670;&#26159;&#21213;&#36942;&#23448;&#32178;&#25110;&#32773;&#25105;&#25552;&#21040;&#30340;&#20854;&#20182;&#25991;&#20214;&#24037;&#20855;&#12290;</p><p>&#30070;&#28982;&#65292;&#36889;&#20063;&#34920;&#31034;&#23427;&#30340;&#25991;&#20214;&#32034;&#24341;&#23601;&#36319;&#23448;&#26041;&#30340;&#19968;&#27171;&#65292;&#19981;&#20687; <a href="https://swiftontap.com/">SwiftOnTap</a> &#25110; <a href="https://mackuba.eu/swiftui/changelog">MacBuka</a> &#37027;&#27171;&#26377;&#29992;&#24515;&#32232;&#25490;&#36942;&#12290;&#33267;&#23569;&#25105;&#20491;&#20154;&#35258;&#24471;&#65292;&#24819;&#35201;&#20840;&#38754;&#20102;&#35299; SwiftUI API &#30340;&#35441;&#65292;&#23448;&#26041;&#30340;&#32034;&#24341;&#19981;&#22914;&#21069;&#20841;&#32773;&#12290;</p><p>Dash &#26377;&#20491;&#23567;&#32570;&#40670;&#65292;&#26159; Apple &#23448;&#26041;&#25991;&#20214;&#26377;&#26178;&#20505;&#26371;&#25918;&#25130;&#22294;&#65292;&#36889;&#20491;&#30446;&#21069;&#22312; Dash &#26159;&#30475;&#19981;&#21040;&#30340;&#12290;&#24184;&#22909;&#65292;Dash &#36319;&#23448;&#26041;&#25991;&#20214;&#30340;&#36899;&#21205;&#27231;&#21046;&#20570;&#24471;&#24456;&#22909;&#65292;&#21487;&#20197;&#24478;&#36984;&#21934;&#25110;&#24555;&#36895;&#37749;&#25171;&#38283; Xcode &#25110;&#26159;&#23448;&#32178;&#12290;</p><p>&#25105;&#24120;&#24120;&#22312;&#20998;&#20139;&#36899;&#32080;&#65292;&#24456;&#24120;&#29992;&#21040;&#12300;Copy Online Page URL&#12301;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NeZC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2640e4aa-7b62-401f-8e76-c6fbbc2a952e_474x256.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NeZC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2640e4aa-7b62-401f-8e76-c6fbbc2a952e_474x256.png 424w, https://substackcdn.com/image/fetch/$s_!NeZC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2640e4aa-7b62-401f-8e76-c6fbbc2a952e_474x256.png 848w, https://substackcdn.com/image/fetch/$s_!NeZC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2640e4aa-7b62-401f-8e76-c6fbbc2a952e_474x256.png 1272w, https://substackcdn.com/image/fetch/$s_!NeZC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2640e4aa-7b62-401f-8e76-c6fbbc2a952e_474x256.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NeZC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2640e4aa-7b62-401f-8e76-c6fbbc2a952e_474x256.png" width="474" height="256" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/2640e4aa-7b62-401f-8e76-c6fbbc2a952e_474x256.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:256,&quot;width&quot;:474,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NeZC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2640e4aa-7b62-401f-8e76-c6fbbc2a952e_474x256.png 424w, https://substackcdn.com/image/fetch/$s_!NeZC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2640e4aa-7b62-401f-8e76-c6fbbc2a952e_474x256.png 848w, https://substackcdn.com/image/fetch/$s_!NeZC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2640e4aa-7b62-401f-8e76-c6fbbc2a952e_474x256.png 1272w, https://substackcdn.com/image/fetch/$s_!NeZC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2640e4aa-7b62-401f-8e76-c6fbbc2a952e_474x256.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#19981;&#36942;&#65292;Dash &#30446;&#21069;&#30340;&#29256;&#26412;&#27794;&#36774;&#27861;&#21482;&#25628;&#23563; SwiftUI &#25991;&#20214;&#65292;&#32780;&#26159;&#26371;&#37341;&#23565;&#25152;&#26377; Apple &#25991;&#20214;&#12290;&#25628;&#23563;&#32080;&#26524;&#30475;&#24471;&#21040;&#26159;&#24478;&#21738;&#20491; framework &#20358;&#30340;&#65292;&#20294;&#19981;&#33021;&#20107;&#20808;&#36942;&#28670;&#25481;&#12290;</p><p>&#23565;&#26044;&#21482;&#24819;&#30475;&#20840;&#37096; SwiftUI API &#30340;&#20154;&#20358;&#35498;&#65292;&#21487;&#33021;&#36996;&#26159; <a href="https://mackuba.eu/swiftui/changelog">MacBuka</a> &#30340; Index &#27604;&#36611;&#23526;&#38555;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DBMs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff416dd97-4f4c-4dd9-8e31-b8d0c3eebc32_2940x1838.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DBMs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff416dd97-4f4c-4dd9-8e31-b8d0c3eebc32_2940x1838.png 424w, https://substackcdn.com/image/fetch/$s_!DBMs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff416dd97-4f4c-4dd9-8e31-b8d0c3eebc32_2940x1838.png 848w, https://substackcdn.com/image/fetch/$s_!DBMs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff416dd97-4f4c-4dd9-8e31-b8d0c3eebc32_2940x1838.png 1272w, https://substackcdn.com/image/fetch/$s_!DBMs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff416dd97-4f4c-4dd9-8e31-b8d0c3eebc32_2940x1838.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DBMs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff416dd97-4f4c-4dd9-8e31-b8d0c3eebc32_2940x1838.png" width="1456" height="910" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/f416dd97-4f4c-4dd9-8e31-b8d0c3eebc32_2940x1838.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:910,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DBMs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff416dd97-4f4c-4dd9-8e31-b8d0c3eebc32_2940x1838.png 424w, https://substackcdn.com/image/fetch/$s_!DBMs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff416dd97-4f4c-4dd9-8e31-b8d0c3eebc32_2940x1838.png 848w, https://substackcdn.com/image/fetch/$s_!DBMs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff416dd97-4f4c-4dd9-8e31-b8d0c3eebc32_2940x1838.png 1272w, https://substackcdn.com/image/fetch/$s_!DBMs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff416dd97-4f4c-4dd9-8e31-b8d0c3eebc32_2940x1838.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#38364;&#26044;&#36889;&#40670;&#65292;&#25105;&#32102; Dash &#38283;&#30332;&#32773;&#25552;&#20102;&#24847;&#35211;&#65292;&#20182;&#20043;&#24460;&#21487;&#33021;&#26371;&#21152;&#36914;&#21435;&#21815;&#12290;</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/kapeli/status/1547143960497426432&quot;,&quot;full_text&quot;:&quot;<span class=\&quot;tweet-fake-link\&quot;>@ethanhuang13</span> <span class=\&quot;tweet-fake-link\&quot;>@buildthatapp</span> That's a great idea. I'm thinking of supporting the creation of a subset of a docset, given a parent docset and some filters. So you'd create a SwiftUI subset docset and then use it like all the other docsets in Dash.&quot;,&quot;username&quot;:&quot;kapeli&quot;,&quot;name&quot;:&quot;Kapeli&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Wed Jul 13 09:00:39 +0000 2022&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:2,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>&#26368;&#24460;&#37325;&#40670;&#65292;&#28858;&#20309;&#25105;&#26371;&#20778;&#20808;&#20351;&#29992; Dash &#21602;&#65311;&#22240;&#28858;&#23427;&#26377;&#36319; <a href="https://www.raycast.com/">Raycast</a> <a href="https://www.raycast.com/RSO/dash">&#25972;&#21512;</a>&#65281;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!annF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43f22c61-0148-4761-9add-7068a1fccbd5_1772x1172.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!annF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43f22c61-0148-4761-9add-7068a1fccbd5_1772x1172.png 424w, https://substackcdn.com/image/fetch/$s_!annF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43f22c61-0148-4761-9add-7068a1fccbd5_1772x1172.png 848w, https://substackcdn.com/image/fetch/$s_!annF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43f22c61-0148-4761-9add-7068a1fccbd5_1772x1172.png 1272w, https://substackcdn.com/image/fetch/$s_!annF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43f22c61-0148-4761-9add-7068a1fccbd5_1772x1172.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!annF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43f22c61-0148-4761-9add-7068a1fccbd5_1772x1172.png" width="1456" height="963" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/43f22c61-0148-4761-9add-7068a1fccbd5_1772x1172.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:963,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!annF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43f22c61-0148-4761-9add-7068a1fccbd5_1772x1172.png 424w, https://substackcdn.com/image/fetch/$s_!annF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43f22c61-0148-4761-9add-7068a1fccbd5_1772x1172.png 848w, https://substackcdn.com/image/fetch/$s_!annF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43f22c61-0148-4761-9add-7068a1fccbd5_1772x1172.png 1272w, https://substackcdn.com/image/fetch/$s_!annF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43f22c61-0148-4761-9add-7068a1fccbd5_1772x1172.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#20197;&#21069;&#25105;&#37117;&#26159; <a href="https://www.alfredapp.com/">Alfred</a> &#20316;&#28858;&#24555;&#36895;&#36914;&#20837; Google &#25628;&#23563;&#30340;&#20837;&#21475;&#12290;&#25152;&#20197;&#25214;&#25991;&#20214;&#21487;&#33021;&#23601;&#26159;&#36664;&#20837;&#12300;SwiftUI Text&#12301;&#20043;&#39006;&#38364;&#37749;&#23383;&#65292;&#28982;&#24460;&#20877;&#24478; Google &#25628;&#23563;&#32080;&#26524;&#36914;&#21040; Apple &#23448;&#32178;&#12290;</p><p>&#33258;&#24478;&#29992;&#20102; <a href="https://www.raycast.com/">Raycast</a> + <a href="https://kapeli.com/dash">Dash</a> &#20197;&#24460;&#65292;&#23601;&#21487;&#20197;&#24456;&#36629;&#39686;&#19988;&#24555;&#36895;&#30340;&#38626;&#32218;&#26597;&#35426;&#20102;&#12290;</p><p>Dash &#30340;&#21806;&#20729;&#26159; $29.99 &#32654;&#37329;&#36023;&#26039;&#65292;&#26377;&#35430;&#29992;&#26399;&#12290;&#25105;&#35258;&#24471;&#38750;&#24120;&#36229;&#20540;&#65292;&#32780;&#19988;&#32085;&#19981;&#26159;&#21482;&#33021;&#20316;&#28858; SwiftUI &#25991;&#20214;&#24037;&#20855;&#32780;&#24050;&#12290;</p><blockquote><p>&#20063;&#26159;&#29992;&#21508;&#20301;&#20184;&#36027;&#35712;&#32773;&#30340;&#35330;&#38321;&#36027;&#29992;&#36092;&#36023;&#30340;&#65292;&#20877;&#27425;&#24863;&#35613;&#25903;&#25345;&#128591;</p></blockquote><h2><strong>&#32080;&#35542;</strong></h2><p>&#20197;&#19978;&#23601;&#26159;&#25105;&#20351;&#29992; SwiftUI &#25991;&#20214;&#24037;&#20855;&#30340;&#24515;&#24471;&#33287;&#32147;&#39511;&#12290;</p><p>&#24517;&#38920;&#35201;&#35498;&#65292;&#30495;&#30340;&#24456;&#35613;&#35613;&#21508;&#20301;&#20184;&#36027;&#25903;&#25345;&#25105;&#23531;&#27492;&#23560;&#27396;&#30340;&#26379;&#21451;&#20497;&#65292;&#19981;&#28982;&#25105;&#20063;&#19981;&#35211;&#24471;&#26371;&#21435;&#36023;&#37027;&#20123;&#24037;&#20855;&#20358;&#35430;&#29992;&#65292;&#28982;&#24460;&#23531;&#20986;&#36889;&#31687;&#25991;&#31456;&#12290;&#24456;&#20139;&#21463;&#36889;&#20491;&#21462;&#20043;&#26044;&#35712;&#32773;&#12289;&#29992;&#20043;&#26044;&#35712;&#32773;&#30340;&#24490;&#29872;&#65281;</p><div><hr></div><p>&#21916;&#27489;&#36889;&#31687;&#25991;&#31456;&#30340;&#35441;&#65292;<strong><a href="https://www.patreon.com/ethanhuang13">&#35531;&#21040; Patreon &#35330;&#38321;</a></strong>&#25903;&#25345;&#25105;&#128591;</p><p>&#25105;&#30340;&#30446;&#27161;&#26159;&#32047;&#31309;&#21040; 100 &#20301;&#25903;&#25345;&#32773;&#65292;&#30446;&#21069; <strong>27%</strong>&#12290;&#20063;&#21487;&#20197;&#25353;&#19979;&#24859;&#24515;&#10084;&#65039;&#12289;&#30041;&#35328;&#128172;&#12289;&#22238;&#20449;&#9993;&#65039;&#33287;&#25105;&#20132;&#27969;&#12290;&#36889;&#20123;&#22238;&#39243;&#37117;&#26371;&#30452;&#25509;&#24433;&#38911;&#21040;&#25105;&#32380;&#32396;&#23531;&#20316;&#30340;&#21205;&#21147;&#33287;&#38971;&#29575;&#21908;&#12290;</p><p>&#24076;&#26395;&#20170;&#22825;&#30340;&#20839;&#23481;&#21487;&#20197;&#21152;&#36895;&#20320;&#25484;&#25569;&#30340; SwiftUI&#12290;&#25105;&#20497;&#19979;&#19968;&#26399;&#35211;&#65281;</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI 專欄 #5 只要看一眼 body]]></title><description><![CDATA[SwiftUI &#35712;&#23436;&#23601;&#20837;&#22353; 2022/08/26]]></description><link>https://www.ethanhuang13.com/p/swiftui-5-look-at-the-body</link><guid isPermaLink="false">https://www.ethanhuang13.com/p/swiftui-5-look-at-the-body</guid><dc:creator><![CDATA[13]]></dc:creator><pubDate>Thu, 25 Aug 2022 22:00:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wF_o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40d7f88-3d37-4dfe-a2c6-3adf32319a7b_2208x1778.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>13 &#30340;&#35441;</strong></p><blockquote><p>SwiftUI &#23560;&#27396;&#26159;&#19968;&#20491;&#20184;&#36027;&#23560;&#27396;&#65292;&#21482;&#26159;&#25105;&#27794;&#26377;&#35373;&#31435;&#20184;&#36027;&#29254;&#65292;&#32780;&#26159;&#25505;&#29992;&#12300;&#35488;&#23526;&#35330;&#38321;&#12301;&#21046;&#24230;&#12290;</p><p>&#25105;&#30340;&#30446;&#27161;&#26159;&#32047;&#31309;&#21040; 100 &#20301; <a href="https://www.patreon.com/ethanhuang13">Patreon</a> &#25903;&#25345;&#32773;&#65292;&#30446;&#21069;&#36914;&#24230;&#20358;&#21040; <strong>27%</strong>&#65292;&#24863;&#35613;&#26032;&#33290;&#26379;&#21451;&#20497;&#30340;&#25903;&#25345;&#12290;</p><p>&#22914;&#26524;&#20320;&#26159;&#31532;&#19968;&#27425;&#35712;&#36889;&#20491;&#23560;&#27396;&#65292;&#24314;&#35696;&#20808;<a href="https://www.ethanhuang13.com/p/swiftui-index">&#22238;&#21040;&#30446;&#37636;</a>&#65292;&#29031;&#38918;&#24207;&#38321;&#35712;&#12290;</p><p>&#38626;&#19978;&#27425;&#30332;&#34920;&#23560;&#27396;&#25991;&#31456;&#24050;&#32147;&#36942;&#20102;&#19968;&#20491;&#22810;&#26376;&#65292;&#26368;&#20027;&#35201;&#26159;&#22240;&#28858;&#25105;&#36889;&#38499;&#23376;&#24037;&#20316;&#20839;&#23481;&#36681;&#35722;&#65292;&#24456;&#23569;&#23531; SwiftUI&#65292;&#29978;&#33267;&#36899;&#31243;&#24335;&#37117;&#24456;&#23569;&#23531;&#24456;&#22810;&#128517;</p><p>&#22312;&#36889;&#31278;&#24773;&#27841;&#19979;&#35201;&#32380;&#32396;&#23531;&#20986;&#38263;&#31687;&#30340; SwiftUI &#25991;&#31456; &#65292;&#26377;&#33879;&#22825;&#28982;&#30340;&#24515;&#29702;&#38556;&#31001;&#12290;&#20877;&#21152;&#19978;&#21069;&#38499;&#23376;&#20241;&#20102;&#20491;&#20551;&#12290;</p><p>&#19981;&#36942;&#26082;&#28982;&#37117;&#35498;&#26159;&#35330;&#38321;&#21046;&#30340;&#20184;&#36027;&#23560;&#27396;&#65292;&#32317;&#26159;&#19981;&#33021;&#22240;&#28858;&#36889;&#27171;&#23601;&#25850;&#33879;&#12290;&#29992;&#20358;&#21050;&#28608;&#23531;&#20316;&#38728;&#24863;&#30340;&#21508;&#31278;&#35373;&#20633;&#24050;&#32147;&#22312;&#36335;&#19978;&#20102;&#65292;&#24076;&#26395;&#21487;&#20197;&#22909;&#36681;&#65288;13&#65292;&#20320;&#19981;&#26159;&#21448;&#25214;&#29702;&#30001;&#33457;&#37666;&#21543;&#65311;&#128527;&#65289;&#12290;</p><p>&#21487;&#20197;&#30906;&#23450;&#30340;&#26159;&#65292;&#20197;&#24460;&#30340;&#25991;&#31456;&#31687;&#24133;&#26371;&#30701;&#19968;&#40670;&#12289;&#36611;&#22909;&#28040;&#21270;&#19968;&#40670;&#12290;</p><p>&#20170;&#22825;&#20358;&#36319;&#22823;&#23478;&#32842;&#25105;&#37117;&#24590;&#40636;&#25972;&#29702; SwiftUI &#30340;&#31243;&#24335;&#30908;&#65292;&#35731;&#23427;&#22909;&#35712;&#22909;&#25026;&#12290;</p><p>&#65288;<a href="https://www.ethanhuang13.com/p/swiftui-4-not-just-color">&#30475;&#21069;&#19968;&#26399;</a> &#183; <a href="https://www.ethanhuang13.com/p/swiftui-index">&#22238;&#23560;&#27396;&#30446;&#37636;</a> &#183; <a href="https://www.ethanhuang13.com/">&#22238;&#39318;&#38913;</a>&#65289;</p></blockquote><div><hr></div><h2><strong>&#19968;&#30446;&#20102;&#28982;&#30340; </strong><code>body</code></h2><p>SwiftUI &#31639;&#26159;&#24456;&#22909;&#23531;&#65292;&#23588;&#20854;&#26159;&#25645;&#37197;&#25105;<a href="https://www.ethanhuang13.com/p/swiftui-1-prepare-xcode">&#19968;&#38283;&#22987;&#20171;&#32057;</a>&#30340; SwiftFormat &#31561;&#25216;&#24039;&#12290;</p><p>&#20294;&#26159;&#22914;&#26524;&#20320;&#19981;&#27880;&#24847;&#30340;&#35441;&#65292;&#36996;&#26159;&#21487;&#20197;&#23531;&#20986;&#24456;&#38627;&#38321;&#35712;&#12289;&#24456;&#38627;&#32173;&#35703;&#30340;&#31243;&#24335;&#30908;&#12290;</p><p>&#30001;&#26044; SwiftUI &#30340; <code>View</code> &#35041;&#38754;&#19968;&#23450;&#26371;&#30340;&#37096;&#20998;&#23601;&#26159; <code>body</code>&#65292;&#25152;&#20197;&#25105;&#35731;&#31243;&#24335;&#30908;&#22909;&#35712;&#30340;&#26041;&#24335;&#23601;&#26159;&#9472;&#9472;<strong>&#35731; </strong><code>body</code><strong> &#19968;&#30524;&#23601;&#21487;&#20197;&#34987;&#30475;&#36879;</strong>&#65281;</p><p>&#20358;&#65292;&#30452;&#25509;&#30475;&#19968;&#27573;&#31243;&#24335;&#30908;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wF_o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40d7f88-3d37-4dfe-a2c6-3adf32319a7b_2208x1778.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wF_o!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40d7f88-3d37-4dfe-a2c6-3adf32319a7b_2208x1778.png 424w, https://substackcdn.com/image/fetch/$s_!wF_o!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40d7f88-3d37-4dfe-a2c6-3adf32319a7b_2208x1778.png 848w, https://substackcdn.com/image/fetch/$s_!wF_o!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40d7f88-3d37-4dfe-a2c6-3adf32319a7b_2208x1778.png 1272w, https://substackcdn.com/image/fetch/$s_!wF_o!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40d7f88-3d37-4dfe-a2c6-3adf32319a7b_2208x1778.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wF_o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40d7f88-3d37-4dfe-a2c6-3adf32319a7b_2208x1778.png" width="1456" height="1172" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/f40d7f88-3d37-4dfe-a2c6-3adf32319a7b_2208x1778.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1172,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:414852,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wF_o!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40d7f88-3d37-4dfe-a2c6-3adf32319a7b_2208x1778.png 424w, https://substackcdn.com/image/fetch/$s_!wF_o!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40d7f88-3d37-4dfe-a2c6-3adf32319a7b_2208x1778.png 848w, https://substackcdn.com/image/fetch/$s_!wF_o!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40d7f88-3d37-4dfe-a2c6-3adf32319a7b_2208x1778.png 1272w, https://substackcdn.com/image/fetch/$s_!wF_o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40d7f88-3d37-4dfe-a2c6-3adf32319a7b_2208x1778.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#30475;&#24471;&#20986;&#20358;&#36889;&#26159;&#20160;&#40636;&#30059;&#38754;&#21966;&#65311;&#26377;&#21738;&#20123;&#20803;&#20214;&#65311;&#20803;&#20214;&#20043;&#38291;&#25490;&#29256;&#30340;&#38364;&#20418;&#26159;&#24590;&#40636;&#27171;&#23376;&#65311;&#26159;&#19981;&#26159;&#19968;&#30524;&#23601;&#30475;&#25026;&#20102;&#12290;</p><p>&#22914;&#26524;&#20877;&#25645;&#37197;&#22949;&#21892;&#23436;&#25972;&#30340; Preview &#22312;&#26049;&#37002;&#65292;&#26159;&#19981;&#26159;&#24456;&#23481;&#26131;&#23601;&#25226;&#20803;&#20214;&#33287;&#23526;&#38555;&#21576;&#29694;&#30340;&#27171;&#36899;&#32080;&#36215;&#20358;&#65311;</p><p>&#36889;&#23601;&#26159;&#25105;&#20497;&#35201;&#30340;&#25928;&#26524;&#65281;</p><p>&#30070;&#28982;&#65292;&#27794;&#32147;&#36942;&#37723;&#37706;&#30340; <code>body</code>&#65288;&#65311;&#65289;&#32085;&#23565;&#19981;&#26159;&#19968;&#38283;&#22987;&#23601;&#38263;&#36889;&#27171;&#12290;&#20197;&#19979;&#27512;&#32013;&#25105;&#36890;&#24120;&#23531;&#19968;&#20491; SwiftUI &#30059;&#38754;&#30340;&#27493;&#39519;&#12290;</p><h2><strong>&#31532;&#19968;&#38542;&#27573;&#65306;&#24555;&#36895;&#25490;&#29256;</strong></h2><p>&#28858;&#20102;&#24555;&#36895;&#35519;&#25972;&#30059;&#38754;&#20803;&#20214;&#65292;&#22312;&#38283;&#22987;&#19968;&#20491;&#26032;&#30340; <code>View</code> &#26178;&#65292;&#25152;&#26377;&#30340;&#31243;&#24335;&#30908;&#26371;&#20808;&#25824;&#22312; <code>body</code> &#36889;&#20491; closure &#35041;&#38754;&#12290;</p><p>&#19968;&#37002;&#22312; <code>body</code> &#28155;&#21152;&#31243;&#24335;&#30908;&#65292;&#19968;&#37002;&#23565;&#29031; Preview &#26159;&#21542;&#31526;&#21512;&#38656;&#27714;&#30340;&#35373;&#35336;&#22294;&#12290;</p><p>&#22914;&#26524;&#36935;&#21040;&#35201;&#20381;&#29031;&#35722;&#25976;&#20358;&#25913;&#35722;&#39023;&#31034;&#26041;&#24335;&#65292;&#25105;&#36890;&#24120;&#26371;&#20808;&#30452;&#25509;&#23531;&#27515;&#65292;&#32780;&#19981;&#26159;&#25289;&#19968;&#20491;&#35722;&#25976;&#20986;&#20358;&#12290;&#36319;&#36039;&#26009;&#26377;&#38364;&#30340;&#26481;&#35199;&#65292;&#21487;&#20197;&#26202;&#19968;&#40670;&#20877;&#19968;&#36215;&#34389;&#29702;&#12290;</p><h2><strong>&#31532;&#20108;&#38542;&#27573;&#65306;&#25286;&#20998; </strong><code>body</code></h2><p>&#31561;&#21040;&#22823;&#37096;&#20998;&#20803;&#20214;&#37117;&#20855;&#20633;&#20197;&#24460;&#65292;&#24478; Preview &#30475;&#19988;&#20358;&#36319;&#35373;&#35336;&#22294;&#22816;&#20687;&#65292;&#25105;&#23601;&#26371;&#38283;&#22987;&#25226;&#21508;&#20491;&#37096;&#20998;&#21629;&#21517;&#65292;&#25850;&#21040; <code>@ViewBuilder private</code>&#30340; <code>var</code> &#25110; <code>func</code> &#35041;&#12290;</p><blockquote><p>&#20160;&#40636;&#21483;&#12300;&#22816;&#20687;&#12301;&#65311;&#36890;&#24120;&#25226;&#23383;&#39636;&#12289;&#38991;&#33394;&#12289;&#20803;&#20214;&#38291;&#36317;&#37117;&#25351;&#23450;&#27491;&#30906;&#65292;&#36889;&#26178;&#20505;&#30475;&#33879; Preview &#23601;&#26371;&#33707;&#21517;&#22320;&#26377;&#24863;&#35258;&#12290;&#22909;&#20687;&#24050;&#32147;&#20570;&#23436;&#20843;&#25104;&#30340;&#24863;&#35258;&#65292;&#20854;&#23526;&#21487;&#33021;&#25165;&#21083;&#38283;&#22987;&#23531;&#27794;&#24190;&#20998;&#37912;&#12290;</p><p>&#36889;&#22823;&#27010;&#26159;&#23531; SwiftUI &#26368;&#26377;&#25104;&#23601;&#24863;&#30340;&#19968;&#20214;&#20107;&#12290;</p></blockquote><p>&#21629;&#21517;&#23601;&#22914;&#19978;&#38754;&#31243;&#24335;&#30908;&#31034;&#31684;&#30340;&#19968;&#27171;&#65292;&#35201;&#19968;&#30524;&#23601;&#30475;&#25026;&#12290;</p><p>&#23531; <code>@ViewBuilder</code> &#26159;&#20491;&#22909;&#32722;&#24931;&#65292;&#21487;&#20197;&#24456;&#26126;&#39023;&#35731;&#20154;&#30693;&#36947;&#36889;&#26159;&#19968;&#20491;&#27604;&#36611;&#23567;&#30340; <code>View</code>&#12290;</p><p>&#38614;&#28982;&#26377;&#20123;&#22238;&#20659;&#21934;&#19968; <code>View</code> &#32780;&#27794;&#26377;&#26781;&#20214;&#65292;&#20687;&#26159; <code>appLogo</code> &#21482;&#26377;&#19968;&#20491; <code>Image</code>&#65292;&#19981;&#21152; <code>@ViewBuilder</code> &#30340;&#35441;&#65292;compiler &#20063;&#23436;&#20840;&#27794;&#21839;&#38988;&#12290;</p><p>&#20687;&#36889;&#27171;&#65306;</p><pre><code>var appLogo: Image {
  Image("appLogo")
}</code></pre><p>&#20294;&#25105;&#35258;&#24471;&#65292;&#27599;&#27425;&#30475;&#21040; <code>@ViewBuilder</code> &#23601;&#30693;&#36947;&#26159;&#23376;&#30059;&#38754;&#65292;&#30524;&#30555;&#19981;&#29992;&#25475;&#21040;&#24460;&#38754;&#30340;&#22411;&#21029;&#12290;</p><p>&#32780;&#19988;&#25630;&#19981;&#22909;&#20197;&#24460;&#26371;&#38656;&#35201;&#20462;&#25913;&#22238;&#20659;&#30340;&#26481;&#35199;&#65292;&#24460;&#38754;&#19968;&#24459;&#23531; <code>some View</code> &#20063;&#26159;&#26041;&#20415;&#20462;&#25913;&#12290;</p><p><code>private</code> &#21063;&#26159;&#22240;&#28858;&#36890;&#24120;&#21482;&#26371;&#22312; <code>body</code> &#29992;&#21040;&#36889;&#20491;&#20803;&#20214;&#12290;</p><p>&#32317;&#20043;&#65292;&#25105;&#37117;&#26371;&#23531;&#25104;&#36889;&#31278;&#27171;&#30340;&#32080;&#27083;&#65306;<code>@ViewBuilder</code>&#12289;&#25563;&#34892;&#12289;<code>private var</code>&#12289;&#21517;&#31281;&#12289;&#22238;&#20659;&#22411;&#21029;&#28858; <code>some View</code>&#12290;</p><pre><code>@ViewBuilder
private var appLogo: some View {
  Image("appLogo")
}</code></pre><blockquote><p>&#25105;&#32722;&#24931;&#24478; <code>body</code> &#38283;&#22987;&#24448;&#19979;&#37117;&#26159;&#19968;&#25972;&#25490; <code>@ViewBuilder</code>&#65292;&#19981;&#29992;&#29305;&#21029;&#23531; <code>// MARK: Views</code> &#20358;&#20998;&#31243;&#24335;&#30908;&#21312;&#22602;&#12290;&#21453;&#27491;&#30475;&#21040;&#27794;&#26377;&#23531; <code>@ViewBuilder</code> &#30340;&#23601;&#30693;&#36947;&#25458;&#21040;&#21478;&#19968;&#20491;&#21312;&#22602;&#20102;&#65292;&#31639;&#26159;&#28415;&#30452;&#35258;&#30340;</p></blockquote><p>&#37027;&#22914;&#26524;&#24478; <code>body</code> &#25286;&#20998;&#36889;&#20491;&#23376;&#30059;&#38754;&#30340;&#26178;&#65292;&#38656;&#35201;&#20659;&#20837;&#35722;&#25976;&#65292;&#25105;&#23601;&#26371;&#25226;&#23427;&#23531;&#25104; <code>func buildFooView</code> &#30340;&#24418;&#24335;&#12290;</p><p>&#27492;&#26178;&#65292;<code>func</code> &#20839;&#37096;&#29992;&#21040;&#30340;&#35722;&#25976;&#23601;&#35722;&#25104;&#24478;&#22806;&#37096;&#27880;&#20837;&#65292;&#26377;&#30340;&#29978;&#33267;&#35201;&#23531; <code>if else</code>&#12290;&#36889;&#20491;&#23567;&#23567;&#30340;&#21205;&#20316;&#39023;&#24471;&#38750;&#24120;&#33258;&#28982;&#65292;&#20294;&#20320;&#24050;&#32147;&#23565;&#35442;&#20803;&#20214;&#23436;&#25104;&#20102;&#37325;&#35201;&#30340; refactor&#12290;</p><blockquote><p>&#22914;&#26524;&#26159;&#20381;&#29031;&#26781;&#20214;&#20358;&#39023;&#31034; <code>subView</code>&#65292; &#21487;&#20197;&#21482;&#23531; <code>if show { subview }</code>&#65292;&#19981;&#29992;&#23531; <code>else { EmptyView() }</code>&#12290;&#36889;&#26159;&#20351;&#29992; <code>@ViewBuilder</code> &#30340;&#21478;&#19968;&#20491;&#22909;&#34389;</p></blockquote><p><code>body</code> &#37027;&#37002;&#35201;&#19981;&#35201;&#38283;&#22987;&#23450;&#32681; property &#20358;&#25918;&#35201;&#27880;&#20837;&#30340;&#35722;&#25976;&#65311;&#22914;&#26524;&#24456;&#31777;&#21934;&#30340;&#26159;&#21487;&#20197;&#65292;&#20294;&#25105;&#36890;&#24120;&#36996;&#26159;&#26371;&#26202;&#19968;&#40670;&#20877;&#34389;&#29702;&#12290;</p><p>&#25277;&#25104; <code>func buildFooView</code> &#36996;&#26377;&#19968;&#20491;&#22909;&#34389;&#65292;&#23601;&#26159;&#22914;&#26524;&#24819;&#35201;&#21934;&#29544; Preview &#37027;&#20491;&#23376;&#20803;&#20214;&#65292;&#21487;&#20197;&#24456;&#36629;&#39686;&#24471;&#20570;&#21040;&#12290;</p><h2><strong>&#31532;&#19977;&#38542;&#27573;&#65306;&#34389;&#29702;&#36039;&#26009;&#27969;</strong></h2><p>&#31561;&#21040; <code>body</code> &#37117;&#25286;&#20998;&#23436;&#20197;&#24460;&#65292;&#21487;&#20197;&#38283;&#22987;&#27770;&#23450;&#30059;&#38754;&#19978;&#26371;&#35722;&#21205;&#30340;&#37096;&#20998;&#65292;&#26159;&#35201;&#29992; <code>@State</code> &#23433;&#32622;&#12289;&#25226;&#26576;&#20123;&#36039;&#26009;&#25918;&#21040;&#19968;&#20491;&#25110;&#22810;&#20491; view model &#31561;&#31561;&#12290;</p><p>&#36889;&#20491;&#26178;&#20505; <code>View</code> &#30340; init &#20171;&#38754;&#26371;&#23436;&#25104;&#12290;&#32780;&#25105;&#36890;&#24120;&#26371;&#25226; Preview &#35041;&#30340;&#30059;&#38754;&#35079;&#35069;&#22909;&#24190;&#20221;&#65292;&#20381;&#29031;&#25105;&#35258;&#24471;&#38656;&#35201;&#30475;&#21040;&#19981;&#21516;&#36039;&#26009;&#23565;&#25033;&#19981;&#21516;&#27171;&#35980;&#65292;&#32780;&#35519;&#25972; init &#27880;&#20837;&#30340;&#21443;&#25976;&#12290;</p><p>&#20063;&#23601;&#26159;&#21892;&#29992; Preview &#24555;&#36895;&#39511;&#35657;&#19981;&#21516;&#36039;&#26009;&#36319;&#30059;&#38754;&#30340;&#23565;&#25033;&#38364;&#20418;&#12290;</p><h2><strong>&#31532;&#22235;&#38542;&#27573;&#65306;&#23436;&#25104;&#20854;&#39192;&#21151;&#33021;</strong></h2><p>&#26368;&#24460;&#30340;&#27493;&#39519;&#23601;&#26159;&#23436;&#25104;&#21097;&#19979;&#30340;&#21151;&#33021;&#12290;&#27604;&#22914;&#30059;&#38754;&#32048;&#37096;&#30340;&#24494;&#35519;&#12289;&#20018;&#25509;&#21040;&#19979;&#19968;&#23652;&#30059;&#38754;&#65292;&#25110;&#26159;&#33287; SwiftUI &#28961;&#38364;&#30340;&#23526;&#20316;&#12290;</p><p>&#30070;&#28982;&#65292;&#20197;&#19978;&#27493;&#39519;&#20006;&#19981;&#26159;&#32085;&#23565;&#30340;&#65292;&#21482;&#26159;&#25105;&#27512;&#32013;&#33258;&#24049;&#22312;&#38283;&#30332; SwiftUI &#26178;&#65292;&#33258;&#28982;&#32780;&#28982;&#26371;&#36914;&#34892;&#30340;&#38918;&#24207;&#12290;&#26412;&#31687;&#30340;&#37325;&#40670;&#20027;&#35201;&#36996;&#26159;&#22312;&#21069;&#20841;&#38542;&#27573;&#65292;&#24460;&#20841;&#38542;&#27573;&#30340;&#32048;&#31680;&#26377;&#27231;&#26371;&#21487;&#20197;&#20877;&#35036;&#20805;&#12290;&#19981;&#36942;&#25105;&#30456;&#20449;&#20320;&#30495;&#30340;&#19979;&#21435;&#23531; SwiftUI &#19968;&#38499;&#23376;&#20197;&#24460;&#22823;&#27010;&#23601;&#21487;&#20197;&#29702;&#35299;&#65292;&#19981;&#38656;&#35201;&#30828;&#35352;&#12290;</p><h2><strong>&#32080;&#35542;</strong></h2><p>&#19968;&#38283;&#22987;&#30340;&#31243;&#24335;&#30908;&#31684;&#20363;&#26159;&#20491;&#12300;&#30331;&#20837;&#12301;&#38913;&#38754;&#12290;</p><p>&#35041;&#38754;&#30001;&#19978;&#32780;&#19979;&#26371;&#26377; app logo&#12289;&#24115;&#34399;&#36664;&#20837;&#26694;&#12289;&#23494;&#30908;&#36664;&#20837;&#26694;&#12289;&#30331;&#20837;&#25353;&#37397;&#12289;&#24536;&#35352;&#23494;&#30908;&#25353;&#37397;&#12290;&#30456;&#20449;&#20320;&#20809;&#26159;&#30475; <code>body</code> &#30340;&#37096;&#20998;&#65292;&#23601;&#30693;&#36947;&#25972;&#20491;&#30059;&#38754;&#30340;&#32080;&#27083;&#12290;&#20877;&#25645;&#37197; Preview&#65288;&#38614;&#28982;&#25105;&#27794;&#25918;&#22294;&#65289;&#65292;&#24456;&#24555;&#23601;&#33021;&#25484;&#25569;&#25972;&#20491;&#30059;&#38754;&#12290;</p><p>&#36889;&#19981;&#21482;&#26159;&#22312;&#22296;&#38538;&#38283;&#30332;&#26178;&#38656;&#35201;&#30340;&#22909;&#32722;&#24931;&#12290;&#23601;&#31639;&#26159;&#21934;&#20154;&#38283;&#30332;&#65292;&#23565;&#26410;&#20358;&#30340;&#33258;&#24049;&#32173;&#35703;&#36889;&#20221;&#31243;&#24335;&#30908;&#20063;&#32102;&#20104;&#24456;&#22823;&#30340;&#20415;&#21033;&#12290;</p><blockquote><p>&#25105;&#22312;&#21028;&#26039;&#19968;&#20491;&#24037;&#31243;&#24107;&#22312;&#31243;&#24335;&#30908;&#26131;&#35712;&#24615;&#19978;&#30340;&#36896;&#35427;&#26178;&#65292;&#22914;&#26524;&#23565;&#26041;&#21083;&#22909;&#23531;&#20102; SwiftUI&#65292;&#30475;&#19968;&#30524;&#20182;&#24590;&#40636;&#23433;&#25490; <code>body</code> &#23601;&#24046;&#19981;&#22810;&#36275;&#22816;&#12290;</p></blockquote><p>&#23565;&#26044;&#24478; <code>body</code> &#25286;&#20986;&#20358;&#30340;&#23376;&#30059;&#38754;&#65292;&#36890;&#24120;&#26371;&#26377;&#36889;&#24190;&#20491;&#29305;&#24501;&#65306;</p><ul><li><p><code>@ViewBuilder</code> &#20006;&#25563;&#34892;</p></li><li><p><code>private var</code> &#25918;&#38748;&#24907;&#30340;&#20803;&#20214;</p></li><li><p><code>private func</code> &#25918;&#38656;&#35201;&#27880;&#20837;&#21443;&#25976;&#30340;&#20803;&#20214;</p></li><li><p>&#19968;&#24459;&#22238;&#20659; <code>some View</code></p></li></ul><p>&#20320;&#23416;&#26371;&#20102;&#21966;&#65311;</p><div><hr></div><p>&#21916;&#27489;&#26412;&#23560;&#27396;&#30340;&#35712;&#32773;&#65292;<strong><a href="https://www.patreon.com/ethanhuang13">&#35531;&#21040; Patreon &#35330;&#38321;</a></strong>&#25903;&#25345;&#25105;&#128591; &#25105;&#30340;&#30446;&#27161;&#26159;&#32047;&#31309;&#21040; 100 &#20301;&#25903;&#25345;&#32773;&#65292;&#30446;&#21069; <strong>27%</strong>&#12290;&#20063;&#35531;&#25353;&#19979;&#24859;&#24515;&#10084;&#65039;&#12289;&#30041;&#35328;&#128172;&#12289;&#22238;&#20449;&#9993;&#65039;&#33287;&#25105;&#20132;&#27969;&#12290;&#36889;&#20123;&#22238;&#39243;&#37117;&#26371;&#24433;&#38911;&#21040;&#25105;&#32380;&#32396;&#23531;&#20316;&#30340;&#21205;&#21147;&#33287;&#20839;&#23481;&#21908;&#12290;</p><p>&#25105;&#20497;&#19979;&#19968;&#26399;&#35211;&#65281;</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI 專欄 #4 Color 不只是顏色]]></title><description><![CDATA[SwiftUI &#35712;&#23436;&#23601;&#20837;&#22353; 2022/07/15]]></description><link>https://www.ethanhuang13.com/p/swiftui-4-not-just-color</link><guid isPermaLink="false">https://www.ethanhuang13.com/p/swiftui-4-not-just-color</guid><dc:creator><![CDATA[13]]></dc:creator><pubDate>Fri, 15 Jul 2022 10:00:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7cd5de8-4873-4759-9771-b925bbdc69f3_2560x1440.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>13 &#30340;&#35441;</strong></p><blockquote><p>SwiftUI &#23560;&#27396;&#26159;&#19968;&#20491;&#20184;&#36027;&#23560;&#27396;&#65292;&#21482;&#26159;&#25105;&#27794;&#26377;&#35373;&#31435;&#20184;&#36027;&#29254;&#65292;&#32780;&#26159;&#25505;&#29992;&#12300;&#35488;&#23526;&#35330;&#38321;&#12301;&#21046;&#24230;&#12290;</p><p>&#25105;&#30340;&#30446;&#27161;&#26159;&#32047;&#31309;&#21040; 100 &#20301; <a href="https://www.patreon.com/ethanhuang13">Patreon</a> &#25903;&#25345;&#32773;&#65292;&#30446;&#21069;&#36914;&#24230;&#20358;&#21040; <strong>25%</strong>&#65292;&#24863;&#35613;&#26032;&#33290;&#26379;&#21451;&#20497;&#30340;&#25903;&#25345;&#12290;</p><p>&#24456;&#39640;&#33288;&#23560;&#27396;&#23531;&#21040;&#31532; 5 &#31687;&#20102;&#12290;&#20170;&#22825;&#20358;&#36319;&#22823;&#23478;&#32842; <a href="https://developer.apple.com/documentation/swiftui/color">Color</a> &#36889;&#20491;&#25105;&#24456;&#21916;&#27489;&#30340;&#20027;&#38988;&#65292;&#30456;&#20449;&#20320;&#26371;&#35258;&#24471;&#26377;&#36259;&#65281;</p><p>&#22914;&#26524;&#20320;&#26159;&#31532;&#19968;&#27425;&#35712;&#36889;&#20491;&#23560;&#27396;&#65292;&#24314;&#35696;<a href="https://www.ethanhuang13.com/p/swiftui-index">&#20808;&#22238;&#21040;&#30446;&#37636;</a>&#65292;&#29031;&#38918;&#24207;&#38321;&#35712;&#12290;</p><p>&#65288;<a href="https://www.ethanhuang13.com/p/swiftui-3-avoid-these-api">&#30475;&#21069;&#19968;&#26399;</a> &#183; <a href="https://www.ethanhuang13.com/p/swiftui-index">&#22238;&#23560;&#27396;&#30446;&#37636;</a> &#183; <a href="https://www.ethanhuang13.com/">&#22238;&#39318;&#38913;</a>&#65289;</p></blockquote><div><hr></div><p>&#39318;&#20808;&#20358;&#35498; <code>Color</code> &#30340;&#25490;&#29256;&#29305;&#24615;&#12290;</p><p>&#31561;&#19968;&#19979; 13&#65292;<code>Color</code> &#19981;&#23601;&#26159;&#38991;&#33394;&#21966;&#65292;&#21738;&#20358;&#30340;&#25490;&#29256;&#29305;&#24615;&#65311;</p><p>&#25105;&#35498;&#36942;&#20102;&#21568;&#65292;&#21029;&#25226; UIKit &#30340;&#24605;&#32771;&#32722;&#24931;&#24118;&#20358; SwiftUI &#22043;&#12290;&#33394;&#22602;&#28858;&#20160;&#40636;&#19981;&#33021;&#30452;&#25509;&#25343;&#20358;&#25490;&#29256;&#21602;&#65311;</p><h2><strong>&#129521;&#22635;&#28415;&#30059;&#38754;</strong></h2><p>&#25105;&#20497;&#21487;&#20197;&#25226; <code>Color</code> &#25918;&#36914;&#20219;&#20309;&#30340; View Builder &#35041;&#65292;&#21253;&#25324; <code>View</code> &#30340; <code>body</code>&#12290;</p><p>&#39023;&#31034;&#20986;&#20358;&#30340;&#25928;&#26524;&#65292;&#23601;&#26159;&#20308;&#28415;&#25972;&#20491;&#12300;&#30059;&#38754;&#12301;&#65292;&#25110;&#32773;&#35498;&#65292;<strong>&#26377;&#22810;&#23569;&#23601;&#29992;&#22810;&#23569;</strong>&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Fc4d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb935e6ab-fe0d-41f0-832b-b877a4d2c082_2560x1440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Fc4d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb935e6ab-fe0d-41f0-832b-b877a4d2c082_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!Fc4d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb935e6ab-fe0d-41f0-832b-b877a4d2c082_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!Fc4d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb935e6ab-fe0d-41f0-832b-b877a4d2c082_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!Fc4d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb935e6ab-fe0d-41f0-832b-b877a4d2c082_2560x1440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Fc4d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb935e6ab-fe0d-41f0-832b-b877a4d2c082_2560x1440.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/b935e6ab-fe0d-41f0-832b-b877a4d2c082_2560x1440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Fc4d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb935e6ab-fe0d-41f0-832b-b877a4d2c082_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!Fc4d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb935e6ab-fe0d-41f0-832b-b877a4d2c082_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!Fc4d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb935e6ab-fe0d-41f0-832b-b877a4d2c082_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!Fc4d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb935e6ab-fe0d-41f0-832b-b877a4d2c082_2560x1440.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><s>&#28961;&#24773;&#26989;&#37197;</s></figcaption></figure></div><p>&#29992;&#22312;&#26377;&#28687;&#28023;&#30340; iPhone&#65292;&#31995;&#32113;&#26371;&#25226; Safe Area &#30041;&#30333;&#12290;&#22914;&#26524;&#24819;&#25226;&#38991;&#33394;&#22635;&#28415;&#65292;&#21487;&#20197;&#21152;&#20491; <code>.edgesIgnoringSafeArea(.all) </code>&#12290;</p><h2><strong>&#129374;&#22810;&#20491; <a href="https://developer.apple.com/documentation/swiftui/color">Color</a> &#33258;&#21205;&#31561;&#20998;</strong></h2><p>&#37027;&#22914;&#26524;&#25105;&#20497;&#25226;&#22810;&#20491; <code>Color</code> &#25850;&#22312;&#19968;&#36215;&#21602;&#65311;&#24456;&#31777;&#21934;&#65292;&#23427;&#20497;&#26371;&#33258;&#21205;&#24179;&#22343;&#20998;&#37197;&#31354;&#38291;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cTkL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7cd5de8-4873-4759-9771-b925bbdc69f3_2560x1440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cTkL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7cd5de8-4873-4759-9771-b925bbdc69f3_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!cTkL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7cd5de8-4873-4759-9771-b925bbdc69f3_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!cTkL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7cd5de8-4873-4759-9771-b925bbdc69f3_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!cTkL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7cd5de8-4873-4759-9771-b925bbdc69f3_2560x1440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cTkL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7cd5de8-4873-4759-9771-b925bbdc69f3_2560x1440.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/a7cd5de8-4873-4759-9771-b925bbdc69f3_2560x1440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cTkL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7cd5de8-4873-4759-9771-b925bbdc69f3_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!cTkL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7cd5de8-4873-4759-9771-b925bbdc69f3_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!cTkL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7cd5de8-4873-4759-9771-b925bbdc69f3_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!cTkL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7cd5de8-4873-4759-9771-b925bbdc69f3_2560x1440.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#21315;&#33836;&#21029;&#23567;&#30475;&#36889;&#20491;&#29305;&#24615;&#65292;&#24456;&#22810;&#38656;&#35201;&#31561;&#20998;&#30340;&#25490;&#29256;&#38656;&#27714;&#65292;&#29992;&#22810;&#20491; <code>Color</code> &#23601;&#21487;&#20197;&#35299;&#27770;&#12290;</p><p>&#33289;&#20363;&#20358;&#35498;&#65292;&#30070;&#20320;&#38656;&#35201;&#33258;&#24049;&#20570;&#22266;&#23450;&#25976;&#37327;&#30340; tab bar&#12290;</p><p>&#22914;&#26524;&#30452;&#25509;&#29992; <code>Button</code> &#19979;&#21435;&#25490;&#65292;&#22240;&#28858;&#25991;&#23383;&#19981;&#19968;&#27171;&#65292;&#23532;&#24230;&#39023;&#24471;&#19981;&#24179;&#22343;&#65292;&#32780;&#19988;&#26371;&#32302;&#22312;&#19968;&#36215;&#65292;&#32780;&#19981;&#26159;&#22635;&#28415;&#20840;&#37096;&#30340;&#23532;&#24230;&#12290;&#26371;&#35722;&#25104;&#36889;&#27171;&#65306;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4QM8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc29226cb-7de9-4644-8358-d2480fe5a8ec_2560x1440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4QM8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc29226cb-7de9-4644-8358-d2480fe5a8ec_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!4QM8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc29226cb-7de9-4644-8358-d2480fe5a8ec_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!4QM8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc29226cb-7de9-4644-8358-d2480fe5a8ec_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!4QM8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc29226cb-7de9-4644-8358-d2480fe5a8ec_2560x1440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4QM8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc29226cb-7de9-4644-8358-d2480fe5a8ec_2560x1440.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/c29226cb-7de9-4644-8358-d2480fe5a8ec_2560x1440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4QM8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc29226cb-7de9-4644-8358-d2480fe5a8ec_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!4QM8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc29226cb-7de9-4644-8358-d2480fe5a8ec_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!4QM8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc29226cb-7de9-4644-8358-d2480fe5a8ec_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!4QM8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc29226cb-7de9-4644-8358-d2480fe5a8ec_2560x1440.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#24456;&#22810;&#20154;&#26371;&#24819;&#35498;&#65306;&#12300;&#21482;&#35201;&#20808;&#30693;&#36947;&#20840;&#37096;&#30340;&#23532;&#24230;&#65292;&#20877;&#25343;&#20358;&#38500;&#20197; tab &#25976;&#37327;&#23601;&#22909;&#20102;&#12290;&#12301;&#20294;&#26159;&#65292;&#29031;&#33879;&#36889;&#20491;&#24605;&#36335;&#20358;&#20570;&#65292;&#24456;&#23481;&#26131;&#23601;&#26371;&#29992;<a href="https://www.ethanhuang13.com/p/swiftui-3-avoid-these-api">&#19978;&#19968;&#26399;</a>&#25105;&#35498;&#30433;&#37327;&#21029;&#20351;&#29992;&#30340; <code>GeometryReader</code>&#12290;&#36889;&#35041;&#23601;&#19981;&#20570;&#37679;&#35492;&#31034;&#31684;&#20102;&#12290;</p><p>&#20854;&#23526;&#36935;&#21040;&#36889;&#31278;&#38656;&#27714;&#65292;&#29992; <code>Color</code> &#20358;&#25490;&#29256;&#30495;&#30340;&#24456;&#31777;&#21934;&#12290;</p><p>&#20320;&#30475;&#36889;&#27171;&#23376;&#65292;&#27243;&#21521;&#23532;&#24230;&#26159;&#21542;&#27599;&#20491;&#23601;&#26159; 1/3 &#20102;&#21602;&#65311;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gVSk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13dd4bf-a389-4c25-a5ee-ccc02101f581_2560x1440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gVSk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13dd4bf-a389-4c25-a5ee-ccc02101f581_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!gVSk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13dd4bf-a389-4c25-a5ee-ccc02101f581_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!gVSk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13dd4bf-a389-4c25-a5ee-ccc02101f581_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!gVSk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13dd4bf-a389-4c25-a5ee-ccc02101f581_2560x1440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gVSk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13dd4bf-a389-4c25-a5ee-ccc02101f581_2560x1440.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/e13dd4bf-a389-4c25-a5ee-ccc02101f581_2560x1440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gVSk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13dd4bf-a389-4c25-a5ee-ccc02101f581_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!gVSk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13dd4bf-a389-4c25-a5ee-ccc02101f581_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!gVSk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13dd4bf-a389-4c25-a5ee-ccc02101f581_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!gVSk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13dd4bf-a389-4c25-a5ee-ccc02101f581_2560x1440.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#31245;&#24494;&#35299;&#37323;&#19968;&#19979;&#12290;&#39318;&#20808;&#25105;&#20497;&#22312; <code>HStack</code> &#35041;&#25918;&#20102; 3 &#20491; <code>Color</code>&#65292;&#20294;&#26159;&#19981;&#38656;&#35201;&#30495;&#30340;&#26377;&#38991;&#33394;&#65292;&#25152;&#20197;&#30452;&#25509;&#29992;&#36879;&#26126;&#30340; <code>.clear</code>&#12290;</p><p>&#25509;&#19979;&#20358;&#22312;&#27599;&#20491;<code> Color</code> &#21152;&#19978; <code>.overlay</code> &#36889;&#20491; modifier&#65292;&#35041;&#38754;&#25918;&#23526;&#38555;&#35201;&#25353;&#30340; <code>Button</code>&#12290;</p><blockquote><p><code>.overlay</code> &#20063;&#26159;&#20491;&#22909;&#26481;&#35199;&#65292;&#20854;&#23526;&#25105;&#19968;&#30452;&#24456;&#24819;&#33457;&#22823;&#31687;&#24133;&#20358;&#20171;&#32057;&#65292;&#20294;&#20170;&#22825;&#30340;&#20027;&#35282;&#19981;&#26159;&#20182;&#12290;&#30446;&#21069;&#35352;&#24471;&#25343;&#23427;&#36319; <code>Color</code> &#19968;&#36215;&#26381;&#29992;&#23601;&#22909;&#20102;&#12290;</p></blockquote><h2><strong>&#128295;&#20462;&#27491; </strong><code>Button</code> &#40670;&#25353;&#31684;&#22285;</h2><p>&#19978;&#38754;&#36889;&#27573;&#31243;&#24335;&#30908;&#30475;&#20284;&#25490;&#29256;&#27491;&#30906;&#20102;&#65292;&#20294;&#23526;&#38555;&#34892;&#28858;&#26377;&#40670;&#21839;&#38988;&#12290;&#26159;&#21738;&#35041;&#21602;&#65311;&#21407;&#20358;&#26159;&#25353;&#19979;&#21435;&#30340;&#31684;&#22285;&#20173;&#28982;&#20677;&#38480;&#26044;&#26377;&#25991;&#23383;&#30340;&#22320;&#26041;&#12290;&#22240;&#28858; <code>Button</code> &#30340;&#31684;&#22285;&#20677;&#38480;&#26044; <code>label</code> &#30340;&#20839;&#23481;&#12290;</p><p>&#35731;&#25105;&#20497;&#23565;&#35519;&#19968;&#19979;&#20839;&#22806;&#38918;&#24207;&#65292;&#25226; <code>Color.clear.overlay</code> &#25918;&#21040; <code>Button</code> &#30340; <code>label</code> &#35041;&#65292;&#23601;&#21487;&#20197;&#20102;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nxxT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F205a686d-ac45-4923-80dd-9938f75155d0_2560x1440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nxxT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F205a686d-ac45-4923-80dd-9938f75155d0_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!nxxT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F205a686d-ac45-4923-80dd-9938f75155d0_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!nxxT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F205a686d-ac45-4923-80dd-9938f75155d0_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!nxxT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F205a686d-ac45-4923-80dd-9938f75155d0_2560x1440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nxxT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F205a686d-ac45-4923-80dd-9938f75155d0_2560x1440.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/205a686d-ac45-4923-80dd-9938f75155d0_2560x1440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nxxT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F205a686d-ac45-4923-80dd-9938f75155d0_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!nxxT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F205a686d-ac45-4923-80dd-9938f75155d0_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!nxxT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F205a686d-ac45-4923-80dd-9938f75155d0_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!nxxT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F205a686d-ac45-4923-80dd-9938f75155d0_2560x1440.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>&#127748;<a href="https://developer.apple.com/documentation/SwiftUI/View/foregroundColor(_:)">.foregroundColor</a> &#33287; <a href="https://developer.apple.com/documentation/swiftui/view/background(alignment:content:)">.background</a></strong></h2><p>&#26377;&#19968;&#27425;&#65292;&#21516;&#20107;&#22312; review &#25105;&#30340; SwiftUI &#31243;&#24335;&#30908;&#26178;&#65292;&#21839;&#20102;&#38750;&#24120;&#22909;&#30340;&#21839;&#38988;&#65306;</p><blockquote><p>&#12300;&#21516;&#27171;&#26159;&#35373;&#23450;&#38991;&#33394;&#65292;&#28858;&#20160;&#40636; <a href="https://developer.apple.com/documentation/SwiftUI/View/foregroundColor(_:)">.foregroundColor(color)</a> &#30340;&#21517;&#31281;&#20013;&#26377; color &#65292;&#20294;&#26159; <a href="https://developer.apple.com/documentation/swiftui/view/background(alignment:content:)">.background(color)</a> &#21371;&#27794;&#26377; color &#21602;&#65311;&#12301;</p></blockquote><p>&#36889;&#26159;&#22240;&#28858;&#65292;&#36889;&#20841;&#20491; modifier &#20854;&#23526;&#19981;&#26159;&#19968;&#23565;&#30340;&#65292;&#24847;&#32681;&#23436;&#20840;&#19981;&#21516;&#12290;</p><ul><li><p><a href="https://developer.apple.com/documentation/SwiftUI/View/foregroundColor(_:)">.foregroundColor</a> &#26159;&#29992;&#20358;&#24171;&#25991;&#23383;&#12289;&#22294;&#24418;&#19978;&#33394;&#30340;&#12290;&#25105;&#20497;&#20659;&#20837;&#30340; <code>Color</code> &#26159;&#25343;&#20358;&#30070;&#38991;&#33394;&#20351;&#29992;&#30340;&#12290;</p></li><li><p><a href="https://developer.apple.com/documentation/swiftui/view/background(alignment:content:)">.background</a> &#26159;&#29992;&#20358;&#24171; <code>View</code> &#22312;&#23427;&#32972;&#24460;&#21516;&#27171;&#31684;&#22285;&#65292;&#25918;&#20837;&#21478;&#19968;&#20491; <code>View</code> &#30340;&#12290;&#25105;&#20497;&#19981;&#19968;&#23450;&#35201;&#20659;&#20837; <code>Color</code>&#65281;</p></li></ul><p>&#30070;&#28982;&#65292;&#22914;&#26524;&#20659;&#20837; <code>Color</code> &#30340;&#35441;&#65292;&#23427;&#23601;&#26371;&#34987;&#30070;&#25104; <code>View</code> &#20006;&#19988;&#22635;&#28415;&#12300;&#25972;&#20491;&#31684;&#22285;&#12301;&#12290;&#36889;&#23601;&#22238;&#21040;&#25105;&#19968;&#38283;&#22987;&#35498;&#30340; <code>Color</code> &#25490;&#29256;&#29305;&#24615;&#12290;</p><p>&#27599;&#20491; <code>Color</code> &#37117;&#21487;&#20197;&#30070;&#25104; <code>View</code> &#20358;&#20351;&#29992;&#12290;</p><blockquote><p>&#25105;&#30340;&#35498;&#26126;&#26377;&#31777;&#21270;&#36942;&#65292;&#22240;&#28858; <code>background</code> &#26377;&#22909;&#24190;&#31278;&#29256;&#26412;&#12290;&#36889;&#37002;&#25351;&#30340;&#26159;&#20659;&#20837; <code>View</code> &#30340; <a href="https://developer.apple.com/documentation/swiftui/view/background(alignment:content:)">background&lt;V&gt;()</a>&#65292;&#26377;&#33288;&#36259;&#28145;&#20837;&#30340;&#35441;&#65292;&#35531;&#30452;&#25509;&#30475;&#36899;&#32080;&#30340;&#25991;&#20214;&#21543;&#12290;</p></blockquote><h2><strong>&#127747;<a href="https://developer.apple.com/documentation/swiftui/view/background(alignment:content:)">.background</a> &#33287; <a href="https://developer.apple.com/documentation/swiftui/view/overlay(alignment:content:)">.overlay</a></strong></h2><p>&#20877;&#36319;&#20320;&#35498;&#19968;&#20214;&#31192;&#23494;&#21543;&#12290;&#25105;&#20497;&#19968;&#38283;&#22987;&#19981;&#26159;&#25945;&#20102; <code>Color</code> &#25645;&#37197; <code>.overlay</code> &#21966;&#65311;&#20854;&#23526;&#36889;&#20491; <code>.overlay</code> &#36319; <code>.background</code> &#30340;&#25490;&#29256;&#34892;&#28858;&#23436;&#20840;&#19968;&#27171;&#65281;</p><p>&#20841;&#32773;&#37117;&#26159;&#22312;&#30446;&#21069;&#30340; <code>View</code> &#21516;&#27171;&#31684;&#22285;&#20877;&#25918;&#20837;&#21478;&#19968;&#20491; <code>View</code>&#12290;&#24046;&#21029;&#21482;&#26159;&#22312;&#26044;&#65292;&#21152;&#22312; z &#36600;&#30340;&#19978;&#26041;&#36996;&#26159;&#19979;&#26041;&#32780;&#24050;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HCNg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6871b06a-2c14-4d01-8d9c-65aa2ae97dc2_2560x1440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HCNg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6871b06a-2c14-4d01-8d9c-65aa2ae97dc2_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!HCNg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6871b06a-2c14-4d01-8d9c-65aa2ae97dc2_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!HCNg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6871b06a-2c14-4d01-8d9c-65aa2ae97dc2_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!HCNg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6871b06a-2c14-4d01-8d9c-65aa2ae97dc2_2560x1440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HCNg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6871b06a-2c14-4d01-8d9c-65aa2ae97dc2_2560x1440.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/6871b06a-2c14-4d01-8d9c-65aa2ae97dc2_2560x1440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HCNg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6871b06a-2c14-4d01-8d9c-65aa2ae97dc2_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!HCNg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6871b06a-2c14-4d01-8d9c-65aa2ae97dc2_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!HCNg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6871b06a-2c14-4d01-8d9c-65aa2ae97dc2_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!HCNg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6871b06a-2c14-4d01-8d9c-65aa2ae97dc2_2560x1440.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#19978;&#22294;&#30340;&#31684;&#20363;&#20013;&#65292;&#20841;&#20491; <code>Text</code> &#23436;&#20840;&#30456;&#21516;&#65292;&#23610;&#23544;&#20063;&#30456;&#21516;&#12290;<code>Color</code> &#25918;&#22312; <code>.overlay</code> &#33287; <code>.background</code> &#30340;&#24046;&#21029;&#21482;&#22312;&#26044;&#36319; <code>Text</code> &#26159;&#35504;&#33995;&#25481;&#35504;&#12290;</p><blockquote><p>&#32080;&#26524;&#25105;&#36996;&#26159;&#24525;&#19981;&#20303;&#20171;&#32057;&#20102; <code>.overlay</code>&#128514;</p></blockquote><h2><strong>&#127539;</strong><code>Color.clear</code>&#12289; <a href="https://developer.apple.com/documentation/swiftui/spacer">Spacer()</a>&#65292;&#33287; <a href="https://developer.apple.com/documentation/swiftui/emptyview">EmptyView()</a></h2><p>&#36889;&#19977;&#20491;&#26481;&#35199;&#65292;&#20045;&#30475;&#20043;&#19979;&#24456;&#20687;&#65292;&#23526;&#38555;&#19978;&#23436;&#20840;&#19981;&#21516;&#12290;</p><p>&#20808;&#35498; <code>EmptyView()</code>&#12290;&#30070;&#20320;&#38656;&#35201;&#25351;&#23450;&#25110;&#22238;&#20659;&#19968;&#20491; <code>View</code>&#65292;&#20294;&#26159;&#21448;&#19981;&#24076;&#26395;&#30475;&#21040;&#23427;&#65292;&#23601;&#21487;&#20197;&#20351;&#29992; <code>EmptyView</code>&#65292;&#22240;&#28858;&#23427;&#19981;&#26371;&#21443;&#33287;&#25490;&#29256;&#12290;</p><p>&#38614;&#28982; Apple &#23448;&#26041;&#25991;&#20214;&#35498;&#25105;&#20497;&#24456;&#23569;&#26371;&#29992;&#21040;&#65292;&#19981;&#36942;&#23526;&#38555;&#22312;&#23531;&#31243;&#24335;&#30340;&#36942;&#31243;&#20013;&#65292;&#25105;&#36996;&#28415;&#24120;&#25343;&#20358;&#30070;&#20316;&#12300;&#26283;&#26178;&#35731; code &#21487;&#20197; build &#36942;&#30340;&#26481;&#35199;&#12301;&#12290;</p><blockquote><p>&#36889;&#26481;&#35199;&#19981;&#20308;&#35222;&#35258;&#31354;&#38291;&#65292;&#25152;&#20197;&#25105;&#19981;&#31281;&#23427;&#28858;&#12300;placeholder&#12301;&#65292;&#20197;&#20813;&#28151;&#28102;&#27010;&#24565;&#20102;&#12290;</p></blockquote><p>&#25509;&#19979;&#20358;&#27604;&#36611; <code>Color.clear</code> &#33287; <code>Spacer()</code> &#30340;&#19981;&#21516;&#12290;</p><p>&#25105;&#20497;&#24050;&#32147;&#30693;&#36947; <code>Color</code> &#26371;&#22635;&#28415;&#31684;&#22285;&#20102;&#65292;<code>Spacer()</code> &#20063;&#26159;&#12290;&#20294;&#26159; <code>Spacer()</code> &#19968;&#33324;&#20358;&#35498;&#26159;&#29992;&#22312; <code>VStack</code> &#36319; <code>HStack</code>&#65292;&#22312;&#20854;&#20182; <code>View</code> &#20043;&#38291;&#25289;&#38283;&#36317;&#38626;&#29992;&#30340;&#12290;&#27492;&#26178;<strong>&#21482;&#26371;&#22312;&#21934;&#19968;&#36600;&#21521;&#30332;&#29983;&#20316;&#29992;</strong>&#12290;</p><p>&#25563;&#35328;&#20043;&#65292;&#23601;&#26159;&#30041;&#30333;&#12290;</p><p><code>Spacer()</code> &#30340;&#20778;&#20808;&#24230;&#24456;&#20302;&#65292;&#21029;&#30340; <code>View</code> &#27770;&#23450;&#22909;&#38263;&#24230;&#25110;&#23532;&#24230;&#20197;&#24460;&#65292;&#21097;&#19979;&#30340;&#25165;&#30041;&#32102; <code>Spacer()</code>&#12290;&#30456;&#23565;&#30340;&#65292;<code>Color</code> &#26371;&#21507;&#25481;&#19968;&#23450;&#30340;&#31354;&#38291;&#65292;&#29978;&#33267;&#26377;&#21487;&#33021;&#26371;&#25654;&#21435;&#20854;&#20182; <code>View</code> &#30340;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!G_Hr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9c2269b1-f646-470f-b748-2d790862cf82_2560x1440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!G_Hr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9c2269b1-f646-470f-b748-2d790862cf82_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!G_Hr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9c2269b1-f646-470f-b748-2d790862cf82_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!G_Hr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9c2269b1-f646-470f-b748-2d790862cf82_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!G_Hr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9c2269b1-f646-470f-b748-2d790862cf82_2560x1440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!G_Hr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9c2269b1-f646-470f-b748-2d790862cf82_2560x1440.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/9c2269b1-f646-470f-b748-2d790862cf82_2560x1440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!G_Hr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9c2269b1-f646-470f-b748-2d790862cf82_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!G_Hr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9c2269b1-f646-470f-b748-2d790862cf82_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!G_Hr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9c2269b1-f646-470f-b748-2d790862cf82_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!G_Hr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9c2269b1-f646-470f-b748-2d790862cf82_2560x1440.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#19978;&#22294;&#38500;&#20102;&#23637;&#31034; <code>Color</code> &#25824;&#22739;&#21040; <code>Text</code> &#30340;&#27700;&#24179;&#29983;&#23384;&#31354;&#38291;&#20197;&#22806;&#65292;&#23427;&#36996;&#24448;&#22402;&#30452;&#26041;&#21521;&#38263;&#21040;&#28415;&#12290;</p><p>&#25152;&#20197;&#65292;&#22914;&#26524;&#21482;&#26159;&#24076;&#26395;&#21097;&#19979;&#30340;&#31354;&#38291;&#30041;&#30333;&#65292;&#25033;&#35442;&#29992; <code>Spacer()</code>&#65292;&#32780;&#19981;&#26159; <code>Color</code>&#12290;</p><blockquote><p>&#36890;&#24120;&#20063;&#19981;&#26371;&#25226; <code>Color</code> &#36319; <code>Text</code> &#25850;&#22312;&#21516;&#19968;&#20491; <code>VStack</code> &#25110; <code>HStack</code> &#35041;&#21862;&#12290;</p></blockquote><h2><strong>&#127752;<a href="https://developer.apple.com/documentation/swiftui/color">Color</a> &#33287; <a href="https://developer.apple.com/documentation/uikit/uicolor">UIColor</a> &#36817;&#20284;&#30340;&#38991;&#33394;&#21151;&#33021;&#33287;&#29305;&#24615;</strong></h2><p>&#26368;&#24460;&#65292;&#35731;&#25105;&#20497;&#24456;&#24555;&#24118;&#36942; <code>Color</code> &#22312;&#38991;&#33394;&#26041;&#38754;&#30340;&#21151;&#33021;&#33287;&#29305;&#24615;&#12290;&#24456;&#22810;&#37117;&#36319; <a href="https://developer.apple.com/documentation/uikit/uicolor">UIColor</a> &#24456;&#20687;&#65292;&#25152;&#20197;&#27604;&#36611;&#31777;&#21934;&#12290;</p><p>&#24314;&#31435; <code>Color</code> &#26041;&#38754;&#65306;</p><ul><li><p>&#21487;&#20197;&#22312; Asset Catalog &#35373;&#23450;&#33394;&#30908;&#33287;&#21517;&#23383;&#65292;&#20006;<a href="https://developer.apple.com/documentation/uikit/uicolor">&#29992; String &#20358; init</a></p></li><li><p>&#21487;&#20197;&#29992; <a href="https://developer.apple.com/documentation/swiftui/color/init(_:red:green:blue:opacity:)">rgb</a>&#12289;<a href="https://developer.apple.com/documentation/swiftui/color/init(hue:saturation:brightness:opacity:)">hue &#33287; saturation</a>&#65292;&#25110;&#26159; <a href="https://developer.apple.com/documentation/swiftui/color/init(_:white:opacity:)">white</a> &#30340;&#20540;&#20877;&#25645;&#37197;&#36879;&#26126;&#24230;&#20358; init</p></li><li><p>&#21487;&#20197;&#24478; <a href="https://developer.apple.com/documentation/swiftui/color/init(uicolor:)">UIColor</a>&#12289;<a href="https://developer.apple.com/documentation/swiftui/color/init(nscolor:)">NSColor</a>&#12289;<a href="https://developer.apple.com/documentation/swiftui/color/init(cgcolor:)">CGColor</a> &#20358; init&#65292;&#20063;&#21487;&#20197;&#21453;&#36942;&#20358;&#36681;&#25104; <a href="https://developer.apple.com/documentation/uikit/uicolor/3550899-init">UIColor</a>&#12289;<a href="https://developer.apple.com/documentation/appkit/nscolor/3554622-init">NSColor</a>&#12289;<a href="https://developer.apple.com/documentation/swiftui/color/cgcolor">CGColor?</a></p></li></ul><p>&#31995;&#32113;&#38928;&#35373;&#30340;&#24425;&#33394;&#38991;&#33394;&#65292;&#20063;&#36319; <code>UIColor</code> &#27794;&#20160;&#40636;&#19981;&#21516;&#12290;&#26377; <a href="https://developer.apple.com/documentation/swiftui/color/red-r0xf">red</a>&#12289;<a href="https://developer.apple.com/documentation/swiftui/color/orange-82f82">orange</a>&#12289;<a href="https://developer.apple.com/documentation/swiftui/color/yellow-7dwbr">yellow</a> &#31561;&#31561;&#65292;&#21487;&#20197;&#30452;&#25509;&#24478; Apple &#30340; Human Interface Guidelines &#25214;&#21040;<a href="https://developer.apple.com/design/human-interface-guidelines/foundations/color/">&#33394;&#30908;&#34920;</a>&#12290;</p><p>&#35201;&#27880;&#24847;&#30340;&#26159;&#65292;&#36889;&#20123;&#38991;&#33394;&#37117;&#26159;&#21205;&#24907;&#30340;&#65292;&#26371;&#20381;&#29031; Light / Dark Mode&#12289;Accessibility &#30340;&#39640;&#23565;&#27604;&#35373;&#23450;&#31561;&#24773;&#27841;&#32780;&#26377;&#25152;&#19981;&#21516;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UCa2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F62e2253c-6b60-4a36-80a8-b098cfec4d4f_1588x342.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UCa2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F62e2253c-6b60-4a36-80a8-b098cfec4d4f_1588x342.png 424w, https://substackcdn.com/image/fetch/$s_!UCa2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F62e2253c-6b60-4a36-80a8-b098cfec4d4f_1588x342.png 848w, https://substackcdn.com/image/fetch/$s_!UCa2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F62e2253c-6b60-4a36-80a8-b098cfec4d4f_1588x342.png 1272w, https://substackcdn.com/image/fetch/$s_!UCa2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F62e2253c-6b60-4a36-80a8-b098cfec4d4f_1588x342.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UCa2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F62e2253c-6b60-4a36-80a8-b098cfec4d4f_1588x342.png" width="1456" height="314" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/62e2253c-6b60-4a36-80a8-b098cfec4d4f_1588x342.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:314,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UCa2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F62e2253c-6b60-4a36-80a8-b098cfec4d4f_1588x342.png 424w, https://substackcdn.com/image/fetch/$s_!UCa2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F62e2253c-6b60-4a36-80a8-b098cfec4d4f_1588x342.png 848w, https://substackcdn.com/image/fetch/$s_!UCa2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F62e2253c-6b60-4a36-80a8-b098cfec4d4f_1588x342.png 1272w, https://substackcdn.com/image/fetch/$s_!UCa2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F62e2253c-6b60-4a36-80a8-b098cfec4d4f_1588x342.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qQ1N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff463305a-1256-4d86-ae26-0eec71f75472_1582x360.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qQ1N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff463305a-1256-4d86-ae26-0eec71f75472_1582x360.png 424w, https://substackcdn.com/image/fetch/$s_!qQ1N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff463305a-1256-4d86-ae26-0eec71f75472_1582x360.png 848w, https://substackcdn.com/image/fetch/$s_!qQ1N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff463305a-1256-4d86-ae26-0eec71f75472_1582x360.png 1272w, https://substackcdn.com/image/fetch/$s_!qQ1N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff463305a-1256-4d86-ae26-0eec71f75472_1582x360.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qQ1N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff463305a-1256-4d86-ae26-0eec71f75472_1582x360.png" width="1456" height="331" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/f463305a-1256-4d86-ae26-0eec71f75472_1582x360.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:331,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qQ1N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff463305a-1256-4d86-ae26-0eec71f75472_1582x360.png 424w, https://substackcdn.com/image/fetch/$s_!qQ1N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff463305a-1256-4d86-ae26-0eec71f75472_1582x360.png 848w, https://substackcdn.com/image/fetch/$s_!qQ1N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff463305a-1256-4d86-ae26-0eec71f75472_1582x360.png 1272w, https://substackcdn.com/image/fetch/$s_!qQ1N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff463305a-1256-4d86-ae26-0eec71f75472_1582x360.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>&#36889;&#20491;&#29305;&#24615;&#21487;&#20197;&#22312; Asset Color &#35373;&#23450;&#65288;&#19979;&#22294;&#21491;&#37002;&#20841;&#20491;&#31661;&#38957;&#65289;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pneB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf3adb2d-5590-44ec-8990-64d52c81b44d_2560x1440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pneB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf3adb2d-5590-44ec-8990-64d52c81b44d_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!pneB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf3adb2d-5590-44ec-8990-64d52c81b44d_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!pneB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf3adb2d-5590-44ec-8990-64d52c81b44d_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!pneB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf3adb2d-5590-44ec-8990-64d52c81b44d_2560x1440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pneB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf3adb2d-5590-44ec-8990-64d52c81b44d_2560x1440.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/bf3adb2d-5590-44ec-8990-64d52c81b44d_2560x1440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pneB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf3adb2d-5590-44ec-8990-64d52c81b44d_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!pneB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf3adb2d-5590-44ec-8990-64d52c81b44d_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!pneB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf3adb2d-5590-44ec-8990-64d52c81b44d_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!pneB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf3adb2d-5590-44ec-8990-64d52c81b44d_2560x1440.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#26368;&#22522;&#26412;&#30340; <a href="https://developer.apple.com/documentation/swiftui/color/black-4vsp9">black</a>&#12289;<a href="https://developer.apple.com/documentation/swiftui/color/white-7xrbm">white</a> &#30070;&#28982;&#20063;&#26377;&#65292;&#19981;&#36942;&#27794;&#26377;&#25552;&#20379; <a href="https://developer.apple.com/documentation/uikit/uicolor/3255071-systemgray2">systemGray2</a> &#31561;&#28784;&#38542;&#33394;&#12290;</p><p><a href="https://developer.apple.com/documentation/uikit/uicolor/ui_element_colors">UIKit element colors</a> &#20063;&#19981;&#22312; SwiftUI <code>Color</code> &#35041;&#65292;&#21482;&#26377; <a href="https://developer.apple.com/documentation/swiftui/color/primary">.primary</a> &#33287; <a href="https://developer.apple.com/documentation/swiftui/color/secondary">.secondary</a>&#12290;&#30050;&#31455; <code>Color</code> &#36996;&#35201;&#25903;&#25588;&#38750; iOS &#30340;&#20316;&#26989;&#31995;&#32113;&#12290;&#30495;&#30340;&#26377;&#38656;&#35201;&#30340;&#35441;&#65292;&#33258;&#24049;<a href="https://developer.apple.com/documentation/swiftui/color/init(uicolor:)">&#36681;</a>&#23601;&#34892;&#20102;&#12290;</p><h2><strong>&#127912;<a href="https://developer.apple.com/documentation/swiftui/color">Color</a> &#29544;&#29305;&#30340;&#38991;&#33394;&#21151;&#33021;&#33287;&#29305;&#24615;</strong></h2><ul><li><p><a href="https://developer.apple.com/documentation/swiftui/color/accentcolor">.accentColor</a> &#26159; SwiftUI <code>Color</code> &#29305;&#21029;&#30340; property&#65292;&#21487;&#20197;&#35498;&#26159;&#25972;&#20491; app &#30340;&#20027;&#38988;&#33394;&#35519;&#21543;&#12290;&#20320;&#21487;&#20197;&#22312; Asset Catalog &#35373;&#23450;&#12290;&#29694;&#22312;&#26032;&#22686;&#23560;&#26696;&#38928;&#35373;&#37117;&#26371;&#30475;&#21040;&#23427;&#65288;&#19978;&#22294;&#24038;&#37002;&#31661;&#38957;&#65289;&#12290;</p></li></ul><blockquote><p>&#20540;&#24471;&#19968;&#25552;&#30340;&#26159;&#65292;Mac app &#35201;&#20351;&#29992; accentColor &#30340;&#35441;&#65292;&#20351;&#29992;&#32773;&#24517;&#38920;&#25226;&#31995;&#32113;&#20559;&#22909;&#35373;&#23450;&#30340;&#24375;&#35519;&#38991;&#33394;&#35373;&#23450;&#25104;&#12300;&#22810;&#33394;&#12301;&#25165;&#26371;&#30332;&#29983;&#20316;&#29992;&#12290;</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Qx0m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c88b9b7-5d9a-458f-b699-cb91aa425031_1336x565.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Qx0m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c88b9b7-5d9a-458f-b699-cb91aa425031_1336x565.png 424w, https://substackcdn.com/image/fetch/$s_!Qx0m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c88b9b7-5d9a-458f-b699-cb91aa425031_1336x565.png 848w, https://substackcdn.com/image/fetch/$s_!Qx0m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c88b9b7-5d9a-458f-b699-cb91aa425031_1336x565.png 1272w, https://substackcdn.com/image/fetch/$s_!Qx0m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c88b9b7-5d9a-458f-b699-cb91aa425031_1336x565.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Qx0m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c88b9b7-5d9a-458f-b699-cb91aa425031_1336x565.png" width="1336" height="565" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/8c88b9b7-5d9a-458f-b699-cb91aa425031_1336x565.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:565,&quot;width&quot;:1336,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Qx0m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c88b9b7-5d9a-458f-b699-cb91aa425031_1336x565.png 424w, https://substackcdn.com/image/fetch/$s_!Qx0m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c88b9b7-5d9a-458f-b699-cb91aa425031_1336x565.png 848w, https://substackcdn.com/image/fetch/$s_!Qx0m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c88b9b7-5d9a-458f-b699-cb91aa425031_1336x565.png 1272w, https://substackcdn.com/image/fetch/$s_!Qx0m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8c88b9b7-5d9a-458f-b699-cb91aa425031_1336x565.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>&#21487;&#20197;&#29992; <a href="https://developer.apple.com/documentation/swiftui/color/opacity(_:)">.opacity()</a> &#30452;&#25509;&#24171; <code>Color</code> &#20462;&#25913;&#36879;&#26126;&#24230;&#12290;</p></li><li><p>iOS 16 &#26032;&#22686;&#20102;&#24456;&#26377;&#36259;&#30340;&#21151;&#33021; <a href="https://developer.apple.com/documentation/swiftui/color/gradient">.gradient</a>&#65292;&#21487;&#20197;&#30452;&#25509;&#24478; <code>Color</code> &#29986;&#29983;&#28472;&#23652;&#30340; <code>AnyGradient </code>&#12290;</p></li></ul><h2><code>Color</code> &#22914;&#20309;&#12300;&#20445;&#23384;&#12301;&#65311;</h2><p>&#26368;&#24460;&#25105;&#24819;&#25552;&#19968;&#40670;&#65292;&#38991;&#33394;&#30340;&#25351;&#23450;&#20854;&#23526;&#26159;&#28415;&#35079;&#38620;&#30340;&#20107;&#24773;&#12290;&#22914;&#26524;&#20320;&#24819;&#25226; <code>Color</code> &#23384;&#36215;&#20358;&#20379;&#26410;&#20358;&#20351;&#29992;&#65288;&#27604;&#22914;&#35498;&#25226;&#20351;&#29992;&#32773;&#36984;&#25799;&#30340;&#38991;&#33394;&#23384;&#22312; <code>UserDefaults</code>&#65289;&#65292;<code>Color</code> &#27794;&#26377;&#25552;&#20379;&#30452;&#25509;&#35712;&#21462; rgb &#33287; alpha &#20540;&#30340;&#21151;&#33021;&#65292;&#21487;&#33021;&#35201;&#20808;&#36681;&#25104; <code>UIColor</code> &#20877;&#34389;&#29702;&#12290;</p><p>&#30001;&#26044; <code>Color</code> &#36319; <code>UIColor</code> &#37117;&#26377;&#21205;&#24907;&#25976;&#20540;&#30340;&#21151;&#33021;&#65292;&#20197;&#21450;&#21487;&#33021;&#35201;&#32771;&#24942; color space&#65292;&#21209;&#24517;&#25226;&#36889;&#20123;&#32048;&#31680;&#25630;&#28165;&#26970;&#65292;&#20197;&#20813;&#23384;&#37679;&#25976;&#20540;&#12290;</p><h2><strong>&#32080;&#35542;</strong></h2><ol><li><p><code>Color</code> &#26159; <code>View</code>&#65292;&#26377;&#25490;&#29256;&#29305;&#24615;&#65292;&#26371;&#22635;&#28415;&#31684;&#22285;</p></li><li><p>&#22810;&#20491; <code>Color</code> &#25850;&#22312;&#19968;&#36215;&#26178;&#65292;&#26371;&#24179;&#20998;&#31354;&#38291;</p></li><li><p>&#25645;&#37197; <code>.overlay</code> &#24456;&#22909;&#29992;</p></li><li><p><code>.foregroundColor</code> &#33287; <code>.background</code> &#19981;&#26159;&#19968;&#23565;&#12290;&#20659;&#20837; <code>Color</code> &#26178;&#65292;&#21069;&#32773;&#26371;&#25343;&#20358;&#30070;&#38991;&#33394;&#29992;&#65292;&#24460;&#32773;&#26371;&#25343;&#20358;&#30070; <code>View</code> &#20351;&#29992;</p></li><li><p><code>.overlay</code> &#33287; <code>.background</code> &#25165;&#26159;&#19968;&#23565;</p></li><li><p>&#22312; <code>V/HStack</code> &#20013;&#65292;<code>Color</code> &#26371;&#24448;&#20841;&#36600;&#22635;&#28415;&#12289;<code>Spacer()</code> &#21482;&#26371;&#22312;&#21934;&#36600;&#20570;&#30041;&#30333;</p></li><li><p><code>EmptyView()</code> &#19981;&#26371;&#21443;&#33287;&#25490;&#29256;</p></li><li><p>&#38991;&#33394;&#21151;&#33021;&#26041;&#38754;&#65292;&#35377;&#22810;&#37117;&#33287; <code>UIColor</code> &#30456;&#20284;</p></li><li><p>&#29544;&#29305;&#20043;&#34389;&#22312;&#26044; <code>.accentColor</code>&#12289;<code>.opacity()</code>&#12289;<code>.gradient</code> &#31561;</p></li><li><p>&#22914;&#26524;&#35201;&#20445;&#23384; <code>Color</code> &#35201;&#29305;&#21029;&#23567;&#24515;</p></li></ol><div><hr></div><p>&#35712;&#23436;&#36889;&#26399; SwiftUI &#23560;&#27396;&#65292;&#26377;&#27794;&#26377;&#35258;&#24471;&#12300;&#22909;&#22810;&#26481;&#35199;&#20854;&#20182; SwiftUI &#25945;&#23416;&#37117;&#27794;&#25552;&#36942;&#12301;&#21602;&#65311;</p><p>&#21916;&#27489;&#26412;&#23560;&#27396;&#30340;&#35712;&#32773;&#65292;<strong><a href="https://www.patreon.com/ethanhuang13">&#35531;&#21040; Patreon &#35330;&#38321;</a></strong>&#25903;&#25345;&#25105;&#128591; &#25105;&#30340;&#30446;&#27161;&#26159;&#32047;&#31309;&#21040; 100 &#20301;&#25903;&#25345;&#32773;&#65292;&#30446;&#21069; <strong>25%</strong>&#12290;&#20063;&#35531;&#25353;&#19979;&#24859;&#24515;&#10084;&#65039;&#12289;&#30041;&#35328;&#128172;&#12289;&#22238;&#20449;&#9993;&#65039;&#33287;&#25105;&#20132;&#27969;&#12290;&#36889;&#20123;&#22238;&#39243;&#37117;&#26371;&#30452;&#25509;&#24433;&#38911;&#21040;&#25105;&#32380;&#32396;&#23531;&#20316;&#30340;&#21205;&#21147;&#33287;&#38971;&#29575;&#21908;&#12290;</p><p>&#24076;&#26395;&#20170;&#22825;&#30340;&#20839;&#23481;&#35731;&#20320;&#21487;&#20197;&#23569;&#36208;&#19968;&#20123;&#24398;&#36335;&#12290;&#25105;&#20497;&#19979;&#19968;&#26399;&#35211;&#65281;</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI 專欄 #3 那些不該碰的 SwiftUI API]]></title><description><![CDATA[SwiftUI &#35712;&#23436;&#23601;&#20837;&#22353; 2022/07/08]]></description><link>https://www.ethanhuang13.com/p/swiftui-3-avoid-these-api</link><guid isPermaLink="false">https://www.ethanhuang13.com/p/swiftui-3-avoid-these-api</guid><dc:creator><![CDATA[13]]></dc:creator><pubDate>Thu, 07 Jul 2022 22:00:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OKjJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fb2304-07f7-40ca-8e58-b96e5633242a_2560x1338.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>13 &#30340;&#35441;</strong></p><blockquote><p>&#22914;&#26524;&#20320;&#26159;&#31532;&#19968;&#27425;&#35712;&#36889;&#20491;&#23560;&#27396;&#65292;&#24314;&#35696;<a href="https://www.ethanhuang13.com/p/swiftui-index">&#20808;&#24478;&#38957;&#29031;&#38918;&#24207;&#38321;&#35712;</a>&#12290;</p><p>SwiftUI &#23560;&#27396;&#26159;&#19968;&#20491;&#20184;&#36027;&#23560;&#27396;&#65292;&#21482;&#26159;&#25105;&#27794;&#26377;&#35373;&#31435;&#20184;&#36027;&#29254;&#65292;&#32780;&#26159;&#25505;&#29992;&#12300;&#35488;&#23526;&#35330;&#38321;&#12301;&#21046;&#24230;&#12290;</p><p>&#25105;&#30340;&#30446;&#27161;&#26159;&#32047;&#31309;&#21040; 100 &#20301; <a href="https://www.patreon.com/ethanhuang13">Patreon</a> &#25903;&#25345;&#32773;&#65292;&#30446;&#21069;&#36914;&#24230;&#20358;&#21040; <strong>23%</strong>&#65292;&#24863;&#35613;&#26032;&#33290;&#26379;&#21451;&#20497;&#30340;&#25903;&#25345;&#12290;&#35531;&#27880;&#24847; Patreon &#26371;&#22312;&#21021;&#27425;&#35330;&#38321;&#21644;&#27599;&#20491;&#26376; 1 &#34399;&#25187;&#27454;&#12290;</p><p>&#21069;&#38499;&#23376;&#29992;&#35712;&#32773;&#25424;&#27454;&#28155;&#36092;&#20102;&#19968;&#20123;&#35373;&#20633;&#20197;&#21450;&#36575;&#39636;&#65292;&#23565;&#25105;&#30340;&#23531;&#20316;&#24456;&#26377;&#24171;&#21161;&#12290;&#33021;&#22816;&#20570;&#21040;&#21462;&#20043;&#26044;&#35712;&#32773;&#29992;&#20043;&#26044;&#35712;&#32773;&#30340;&#27491;&#21521;&#24490;&#29872;&#65292;&#36996;&#28415;&#24863;&#21205;&#30340;&#12290;</p><p><a href="https://www.ethanhuang13.com/p/swiftui-2-the-good-the-bad">&#19978;&#19968;&#26399;</a>&#32080;&#23614;&#25105;&#35498;&#21040;&#25509;&#19979;&#20358;&#35201;&#32842; <code>Color</code>&#12290;&#19981;&#36942;&#25105;&#22312;&#25512;&#29305;&#19978;&#36774;&#30340;<a href="https://twitter.com/ethanhuang13/status/1537749689344196609?s=21&amp;t=LpIHxLHJCuzmjeVu8jqsUw">&#23567;&#25237;&#31080;</a>&#26377; 3 &#20493;&#30340;&#20154;&#24819;&#20808;&#32893;&#25105;&#35611;&#12300;&#37027;&#20123;&#20320;&#19981;&#35442;&#30896;&#30340; SwiftUI API&#12301;&#65292;&#25152;&#20197;&#25105;&#23601;&#20808;&#20358;&#23531;&#36889;&#20491;&#38988;&#30446;&#12290;</p><p>&#19981;&#36942;&#36889;&#38988;&#30446;&#27604;&#36611;&#40635;&#29033;&#65292;&#22810;&#23531;&#20102;&#19968;&#36913;&#12290;&#20197;&#24460;&#36996;&#26159;&#30433;&#37327;&#25353;&#29031;&#33258;&#24049;&#30340;&#27493;&#35519;&#22909;&#20102;&#128514;</p><p>&#65288;<a href="https://www.ethanhuang13.com/p/swiftui-2-the-good-the-bad">&#30475;&#21069;&#19968;&#26399;</a> &#183; <a href="https://www.ethanhuang13.com/p/swiftui-index">&#22238;&#23560;&#27396;</a> &#183; <a href="https://www.ethanhuang13.com/">&#22238;&#39318;&#38913;</a>&#65289;</p></blockquote><div><hr></div><h2><strong>&#128581;&#19981;&#35201;&#30456;&#20449;&#20219;&#20309;&#20154;</strong></h2><p>&#22312;&#38283;&#22987;&#26412;&#26399;&#36913;&#22577;&#20043;&#21069;&#25105;&#24819;&#35611;&#19968;&#20491;&#38750;&#24120;&#37325;&#35201;&#30340;&#35264;&#24565;&#65306;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.ethanhuang13.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading 13 &#30340; Apple &#38283;&#30332;&#32773;&#38651;&#23376;&#22577;! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><blockquote><p>SwiftUI &#36996;&#24456;&#26032;&#65292;&#19981;&#35201;&#36629;&#20449;&#32178;&#36335;&#19978;&#23531;&#30340;&#26481;&#35199;&#12290;</p></blockquote><p>&#20320;&#22312;&#32178;&#36335;&#19978;&#30475;&#21040;&#38364;&#26044; SwiftUI &#30340;&#36039;&#35338;&#65292;&#19981;&#31649;&#26159; blog&#12289;&#25945;&#23416;&#35506;&#31243;&#12289;StackOverflow &#30340;&#31572;&#26696;&#12289;GitHub &#19978;&#30340;&#31243;&#24335;&#30908;&#12289;Twitter &#19978;&#30340;&#35342;&#35542;&#65292;&#29978;&#33267; Apple &#35542;&#22727;&#36319;&#23448;&#26041;&#31684;&#20363;&#31243;&#24335;&#30908;&#65292;&#37117;&#26377;&#21487;&#33021;&#26159;&#37679;&#30340;&#12290;</p><blockquote><p>&#30070;&#28982;&#20063;&#21253;&#25324;&#25105;&#23531;&#30340;&#26481;&#35199;&#12290;&#38614;&#28982;&#25105;&#37117;&#26371;&#30433;&#21487;&#33021;&#26597;&#35657;&#25165;&#23531;&#20986;&#20358;&#65292;&#20294;&#25105;&#20063;&#26159;&#26371;&#37679;&#30340;&#12290;</p></blockquote><p>&#25152;&#35586;&#30340;&#37679;&#65292;&#19981;&#19968;&#23450;&#20195;&#34920;&#37027;&#27171;&#23531;&#31243;&#24335;&#26371;&#21205;&#19981;&#20102;&#65292;&#20294;&#24456;&#26377;&#21487;&#33021;&#26371;&#22312;&#26576;&#20123;&#29376;&#27841;&#19979;&#28856;&#25481;&#25110;&#26159;&#36229;&#20986;&#20320;&#30340;&#38928;&#26399;&#12290;&#23588;&#20854;&#26159;&#36234;&#26089;&#23531;&#30340;&#20986;&#20358;&#30340; StackOverflow &#31572;&#26696;&#127770;&#12290;&#22240;&#28858; SwiftUI &#21083;&#20986;&#20358;&#30340;&#21069;&#20841;&#24180;&#65292;&#35377;&#22810;&#20154;&#36996;&#22312;&#25720;&#32034;&#12290;&#20809;&#26159;&#35201;&#35731;&#26576;&#20123;&#26481;&#35199;&#33021;&#22816;&#12300;&#20687;&#20197;&#21069; app &#30340;&#34892;&#28858;&#12301;&#65292;&#23601;&#25630;&#21322;&#22825;&#12290;</p><p>&#21069;&#19968;&#26399;&#25105;&#23601;&#26377;&#25552;&#21040;&#65292;&#35258;&#24471;&#19981;&#36969;&#21512; SwiftUI &#29992;&#20358;&#35079;&#35069; UIKit &#30340;&#34892;&#28858;&#12290;&#22914;&#26524;&#30828;&#35201;&#36889;&#40636;&#20570;&#30340;&#35441;&#65292;&#26377;&#38750;&#24120;&#39640;&#30340;&#27231;&#29575;&#26159;&#22312;&#23531;&#25152;&#35586;&#30340; workaround&#12290;</p><p>&#26082;&#28982;&#26159; workaround&#65292;&#23601;&#34920;&#31034;&#23427;&#24456;&#26377;&#21487;&#33021;&#26371;&#22312;&#26410;&#20358;&#30340;&#26576;&#19968;&#22825;&#22750;&#25481;&#12290;&#26377;&#27231;&#26371;&#25105;&#20877;&#25945;&#24590;&#40636;&#31649;&#29702; SwiftUI &#30340; workaround&#65292;&#26368;&#22909;&#19981;&#35201;&#27966;&#19978;&#29992;&#22580;&#12290;</p><p>&#32317;&#20043;&#32178;&#36335;&#19978;&#26377;&#19981;&#23569;&#26481;&#35199;&#26159;&#22312;&#25945; workaround&#65292;&#12300;&#25220;&#31572;&#26696;&#12301;&#30340;&#26178;&#20505;&#35201;&#23567;&#24515;&#12290;</p><p>&#35498;&#20491;&#38988;&#22806;&#35441;&#65292;&#25105;&#33258;&#24049;&#38750;&#24120;&#21916;&#27489;&#30340; SwiftUI &#25991;&#20214;&#32178;&#31449;&#21483;&#20316; <a href="https://swiftontap.com/">SwiftOnTap</a>&#12290;&#23427;&#38598;&#32080;&#20102; Apple &#30340;&#25991;&#20214;&#65292;&#20877;&#36914;&#34892;&#35036;&#20805;&#12290;&#26368;&#22823;&#30340;&#20778;&#40670;&#26159;&#38500;&#20102;&#31684;&#20363;&#31243;&#24335;&#30908;&#20197;&#22806;&#65292;&#36996;&#26371;&#25918;&#19968;&#20123;&#30059;&#38754;&#25130;&#22294;&#12290;&#32780;&#19988;&#20839;&#23481;&#23436;&#20840;&#37117;&#26159; SwiftUI&#65292;&#25152;&#20197;&#25628;&#23563;&#36215;&#20358;&#27604; Apple &#33258;&#24049;&#30340;&#25991;&#20214;&#22909;&#25214;&#26481;&#35199;&#12290;</p><p>&#19981;&#35463;&#24373;&#22320;&#35498;&#65292;&#20197;&#21069;&#25105;&#27599;&#27425;&#23531; SwiftUI &#37117;&#26371;&#29992;&#21040;&#36889;&#20491;&#32178;&#31449;&#20358;&#26597;&#36039;&#26009;&#65292;&#32780;&#19988;&#38263;&#20037;&#20197;&#20358;&#37117;&#22823;&#21147;&#25512;&#34214;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OKjJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fb2304-07f7-40ca-8e58-b96e5633242a_2560x1338.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OKjJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fb2304-07f7-40ca-8e58-b96e5633242a_2560x1338.png 424w, https://substackcdn.com/image/fetch/$s_!OKjJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fb2304-07f7-40ca-8e58-b96e5633242a_2560x1338.png 848w, https://substackcdn.com/image/fetch/$s_!OKjJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fb2304-07f7-40ca-8e58-b96e5633242a_2560x1338.png 1272w, https://substackcdn.com/image/fetch/$s_!OKjJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fb2304-07f7-40ca-8e58-b96e5633242a_2560x1338.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OKjJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fb2304-07f7-40ca-8e58-b96e5633242a_2560x1338.png" width="1456" height="761" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/a6fb2304-07f7-40ca-8e58-b96e5633242a_2560x1338.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OKjJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fb2304-07f7-40ca-8e58-b96e5633242a_2560x1338.png 424w, https://substackcdn.com/image/fetch/$s_!OKjJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fb2304-07f7-40ca-8e58-b96e5633242a_2560x1338.png 848w, https://substackcdn.com/image/fetch/$s_!OKjJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fb2304-07f7-40ca-8e58-b96e5633242a_2560x1338.png 1272w, https://substackcdn.com/image/fetch/$s_!OKjJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fb2304-07f7-40ca-8e58-b96e5633242a_2560x1338.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#20294;&#26159;&#23427;&#20854;&#23526;&#22312; iOS 15 &#25512;&#20986;&#20197;&#24460;&#20006;&#27794;&#26377;&#20570;&#20160;&#40636;&#26356;&#26032;&#65292;&#25152;&#20197;<strong>&#23569;&#20102;&#24456;&#22810;&#26032;&#26481;&#35199;</strong>&#12290;&#22914;&#26524;&#20320;&#30340;&#23560;&#26696;&#21482;&#24478; iOS 14 &#38283;&#22987;&#25903;&#25588;&#36215;&#65292;&#26159;&#27794;&#26377;&#20160;&#40636;&#21839;&#38988;&#30340;&#12290;&#23531; iOS 15 &#20197;&#19978;&#30340;&#35441;&#65292;&#23601;&#26371;&#28431;&#25481;&#19968;&#20123;&#26032;&#21151;&#33021;&#20102;&#12290;</p><p>&#36889;&#20063;&#31639;&#26159;&#21478;&#19968;&#20491;&#19981;&#35201;&#36629;&#20449;&#32178;&#36335;&#19978;&#26481;&#35199;&#30340;&#20363;&#23376;&#21543;&#12290;</p><blockquote><p>&#26377;&#27604; <a href="https://swiftontap.com/">SwiftOnTap</a> &#26356;&#22909;&#30340;&#26367;&#20195;&#26041;&#26696;&#21966;&#65311;&#26377;&#30340;&#65292;&#31561;&#38656;&#35201;&#26178;&#25105;&#20497;&#20877;&#20358;&#20171;&#32057;&#12290;</p></blockquote><h2><strong>&#128581;&#19981;&#35201;&#20351;&#29992; Introspect</strong></h2><p><a href="https://github.com/siteline/SwiftUI-Introspect">SwiftUI-Introspect</a> &#26159;&#19968;&#20491;&#38750;&#24120;&#29105;&#38272;&#30340; SwiftUI &#22871;&#20214;&#12290;&#23427;&#30340;&#21151;&#33021;&#26159;&#21033;&#29992; SwiftUI &#33258;&#24049;&#30340; API&#65292;&#35731;&#38283;&#30332;&#32773;&#22312;&#20351;&#29992; SwiftUI &#30340;&#20803;&#20214;&#26178;&#65292;&#21487;&#20197;&#25214;&#21040;&#23565;&#25033;&#30340; UIKit &#25110; AppKit &#29289;&#20214;&#65292;&#36914;&#34892;&#20462;&#25913;&#12290;</p><p>&#33289;&#20363;&#20358;&#35498;&#65292;<code>List</code> &#22312; iOS 13-15 &#20351;&#29992; <code>UITableView</code> &#20358;&#23526;&#20316;&#12290;&#22312; iOS 15 &#20197;&#21069; <code>List</code> &#27794;&#26377;&#31649;&#29702;&#20998;&#38548;&#32218;&#30340; API&#12290;</p><p>&#19981;&#36942;&#65292;&#36879;&#36942;&#35442;&#22871;&#20214;&#65292;&#20320;&#21487;&#20197;&#23531;&#65306;</p><pre><code>List {
  // list &#20839;&#23481;
}
.introspectTableView { tableView in
  tableView.separatorStyle = .none // &#20351;&#29992; UIKit &#30340;&#26041;&#27861;&#25226;&#20998;&#38548;&#32218;&#34255;&#36215;&#20358;
}</code></pre><p>&#24478;&#26576;&#31278;&#35282;&#24230;&#20358;&#35498;&#65292;Introspect &#26159;&#38750;&#24120;&#20778;&#31168;&#27211;&#25509; SwiftUI &#33287; UIKit/AppKit &#30340;&#27231;&#21046;&#12290;&#23427;&#33021;&#24171;&#20320;&#25214;&#21040; <code>UINavigationController</code>&#12289;<code>UIScrollView</code>&#12289;<code>UITableView</code>&#12289;<code>UITextField</code> &#31561;&#31561; UIKit &#20351;&#29992;&#32773;&#21313;&#20998;&#29087;&#24713;&#30340;&#20803;&#20214;&#12290;</p><p>&#25105;&#22312; iOS 13 &#26178;&#20195;&#23531; SwiftUI &#22823;&#37327;&#20351;&#29992; Introspect&#12290;&#20294;&#26159;&#21040;&#20102; iOS 14 &#20043;&#24460;&#65292;&#28472;&#28472;&#22320;&#23601;&#19981;&#20877;&#20351;&#29992;&#35442;&#22871;&#20214;&#20102;&#12290;&#21407;&#22240;&#26377;&#19977;&#20491;&#12290;</p><p><strong>&#31532;&#19968;&#65306;SwiftUI &#26159;&#24456;&#25277;&#35937;&#30340;&#26694;&#26550;&#65292;&#24213;&#23652;&#23526;&#20316;&#26371;&#25913;&#35722;&#12290;</strong></p><p>&#20197;&#25105;&#19978;&#38754;&#33289;&#30340;&#20363;&#23376;&#20358;&#35498;&#65292;iOS 16 &#30340; <code>List</code> &#19981;&#20877;&#20351;&#29992; <code>UITableView</code> &#23526;&#20316;&#20102;&#12290;&#23531;&#22312; Introspect &#35041;&#38754;&#30340;&#31243;&#24335;&#30908;&#65292;&#22240;&#28858;&#25214;&#19981;&#21040;&#23565;&#25033;&#20803;&#20214;&#65292;&#19981;&#26371;&#34987;&#22519;&#34892;&#12290;&#37027;&#36889;&#20491; app &#36305;&#22312; iOS 16 &#19978;&#26371;&#35722;&#25104;&#20160;&#40636;&#27171;&#23376;&#21602;&#65311;&#23601;&#21482;&#33021;&#36305;&#36215;&#20358;&#25165;&#30693;&#36947;<strong>&#28856;</strong>&#25104;&#24590;&#27171;&#20102;&#12290;</p><p><strong>&#31532;&#20108;&#65306;&#20351;&#29992; Introspect &#26159; workaround&#12290;</strong></p><p>&#26089;&#26399; SwiftUI API &#32570;&#26481;&#32570;&#35199;&#30340;&#26178;&#20505;&#65292;&#25343;&#23427;&#20358;&#26283;&#26178;&#32350;&#36942;&#38750;&#24120;&#22909;&#29992;&#12290;&#20294;&#26159;&#22914;&#26524;&#26377;&#27491;&#24335;&#30340; API&#65292;&#23601;&#19981;&#35442;&#32380;&#32396;&#20351;&#29992; workaround&#12290;</p><p><strong>&#31532;&#19977;&#65306;&#36942;&#24230;&#20381;&#36084; Introspect &#26371;&#23566;&#33268;&#20320;&#23416;&#19981;&#22909; SwiftUI&#12290;</strong></p><p>&#36889;&#25165;&#26159;&#25105;&#21453;&#23565;&#20381;&#36084; Introspect &#30340;&#20027;&#35201;&#21407;&#22240;&#12290;&#23427;&#26371;&#35731;&#20320;&#23416;&#32722; SwiftUI &#30340;&#26178;&#20505;&#65292;&#36996;&#19968;&#30452;&#24819;&#33879;&#30059;&#38754;&#19978;&#30340;&#20803;&#20214;&#26159;&#20160;&#40636; UIKit &#20803;&#20214;&#12289;&#35201;&#36948;&#25104;&#26576;&#20491;&#38656;&#27714;&#24590;&#40636;&#29992; UIKit &#30340;&#26041;&#27861;&#23526;&#29694;&#12290;</p><p>&#36889;&#27171;&#24456;&#23481;&#26131;&#26371;&#35722;&#25104;&#21482;&#26159;&#29992; SwiftUI &#20358;&#21051;&#19968;&#37096;&#20998;&#30059;&#38754;&#65292;&#23526;&#38555;&#19978;&#36996;&#26159;&#29992; UIKit &#30340;&#24515;&#26234;&#27169;&#22411;&#22312;&#24605;&#32771;&#12290;</p><p>&#26412;&#23560;&#27396;&#26159;&#24375;&#28872;&#24314;&#35696;&#24478; iOS 14 SwiftUI &#38283;&#22987;&#25903;&#25588;&#36215;&#30340;&#65292;&#25152;&#20197;&#23601;&#21029;&#29992; Introspect &#20102;&#21543;&#12290;</p><blockquote><p>&#19981;&#36942;&#65292;&#22914;&#26524;&#20320;&#26377;&#33288;&#36259;&#20102;&#35299;&#23427;&#25214;&#21040;&#23565;&#25033; UIKit &#20803;&#20214;&#30340;&#21407;&#29702;&#65292;&#20854;&#23560;&#26696;&#21407;&#22987;&#30908;&#38750;&#24120;&#20540;&#24471;&#38321;&#35712;&#12290;</p></blockquote><h2><strong>&#128581;&#19981;&#25512;&#34214;&#20351;&#29992; <a href="https://developer.apple.com/documentation/swiftui/list">List</a></strong></h2><p>&#26377;&#27794;&#26377;&#32893;&#36942;&#19968;&#21477;&#29609;&#31505;&#35441;&#24418;&#23481; iOS &#24037;&#31243;&#24107;&#30340;&#20027;&#35201;&#24037;&#20316;&#26159;&#12300;&#25226; JSON &#35722;&#25104; table view&#12301;&#12290;</p><p>&#36889;&#20491;&#22043;&#65292;&#25105;&#26082;&#19981;&#21516;&#24847;&#20063;&#19981;&#21453;&#23565;&#129315;</p><p>&#30001;&#27492;&#21487;&#35211;&#21015;&#34920;&#24418;&#24335;&#30340;&#30059;&#38754;&#65292;&#22312; iOS app &#20013;&#21313;&#20998;&#24120;&#35211;&#12290;</p><p>&#20294;&#25105;&#19981;&#26159;&#24456;&#24314;&#35696;&#20351;&#29992; <code>List</code> &#20358;&#20570;&#21015;&#34920;&#30059;&#38754;&#12290;&#24190;&#20491;&#21407;&#22240;&#65306;</p><ol><li><p>&#30452;&#21040; iOS 15 &#25165;&#26377;&#27604;&#36611;&#22909;&#30340;&#33258;&#35330;&#24615;&#65292;&#29305;&#21029;&#26159;&#20998;&#38548;&#32218;&#30340; style</p></li><li><p>&#23427;&#30340;&#36984;&#21462;&#25928;&#26524;&#26159;&#19968;&#25972;&#20491;&#12300;cell&#12301;&#12290;&#27604;&#22914;&#35498;&#35373;&#35336;&#30340;&#35201;&#27714;&#26159;&#25972;&#20491; cell &#21487;&#20197;&#40670;&#25353;&#65292;&#21516;&#26178;&#35041;&#38754;&#26377;&#27604;&#36611;&#23567;&#30340;&#25353;&#37397;&#12290;&#37027;&#19981;&#31649;&#25353;&#21738;&#37002;&#65292;&#37117;&#26371;&#26377;&#25972;&#20491; cell &#34987;&#36984;&#36215;&#20358;&#30340;&#25928;&#26524;&#12290;&#36889;&#32085;&#23565;&#19981;&#26159;&#20320;&#24819;&#35201;&#30340;</p></li><li><p>&#23427;&#26377;&#19968;&#22534; <a href="https://developer.apple.com/documentation/swiftui/liststyle">ListStyle</a> &#21487;&#20197;&#22871;&#29992;&#12290;&#20294;&#30059;&#38754;&#27604;&#36611;&#35079;&#38620;&#26178;&#65292;&#21487;&#33021;&#27794;&#26377;&#31526;&#21512;&#20320;&#38656;&#35201;&#30340;&#27171;&#24335;</p></li></ol><p>&#20320;&#19968;&#38283;&#22987;&#36996;&#26159;&#21487;&#20197;&#29992; <code>List</code> &#35430;&#35430;&#30475;&#65288;&#21839;&#38988;&#26371;&#20986;&#22312;&#21738;&#65292;&#32317;&#26159;&#35201;&#33258;&#24049;&#35430;&#36942;&#22043;&#65289;&#65306;</p><pre><code>List {
  ForEach(data) {
    // cell
  }
}</code></pre><p>&#19968;&#26086;&#30332;&#29694;&#19981;&#22816;&#29992;&#65292;&#26367;&#20195;&#26041;&#26696;&#21487;&#20197;&#32771;&#24942; <a href="https://developer.apple.com/documentation/swiftui/scrollview">ScrollView</a> &#36319; <a href="https://developer.apple.com/documentation/swiftui/lazyvstack">LazyVStack</a> &#30340;&#32068;&#21512;&#12290;&#21453;&#27491; SwiftUI &#22312;&#25913;&#35722;&#30059;&#38754;&#32080;&#27083;&#30340;&#25104;&#26412;&#36229;&#20302;&#12290;</p><pre><code>ScrollView {
  LazyVStack {
    ForEach(data) {
      // cell
    }
  }
}</code></pre><h2><strong>&#128581;&#30433;&#21487;&#33021;&#19981;&#29992; <a href="https://developer.apple.com/documentation/swiftui/geometryreader/">GeometryReader</a></strong></h2><p>&#22312; StackOverflow &#19978;&#23563;&#25214; SwiftUI &#24590;&#27171;&#25490;&#29256;&#26178;&#65292;<code>GeometryReader</code> &#26371;&#22823;&#37327;&#20986;&#29694;&#65281;&#36890;&#24120;&#26159;&#24819;&#35201;&#30693;&#36947;&#23610;&#23544;&#65292;&#28982;&#24460;&#35201;&#12300;&#20659;&#36958;&#12301;&#32102;&#21478;&#19968;&#20491; <code>View</code> &#20316;&#28858;&#25490;&#29256;&#20381;&#25818;&#12290;</p><p>&#20294;&#26159;&#20854;&#23526;&#24456;&#22810;&#26178;&#20505;&#65292;&#29992;&#20854;&#20182;&#30340;&#26041;&#27861;&#21487;&#20197;&#24471;&#21040;&#19968;&#27171;&#30340;&#25490;&#29256;&#25928;&#26524;&#12290;</p><p>&#25105;&#20170;&#22825;&#19981;&#25171;&#31639;&#20171;&#32057;&#23427;&#30340;&#21407;&#29702;&#25110;&#20351;&#29992;&#26041;&#24335;&#12290;&#29992;&#21478;&#19968;&#31278;&#35498;&#27861;&#21240;&#36864;&#22909;&#20102;&#65306;&#25105;&#29694;&#22312;&#26377;&#19968;&#20491;&#24456;&#21916;&#27489;&#30340;&#33126;&#21147;&#27963;&#21205;&#65292;&#23601;&#26159;&#27599;&#27425;&#30475;&#21040;&#26377;&#20154;&#20998;&#20139; SwiftUI &#30340;&#31243;&#24335;&#30908;&#26178;&#65292;&#22914;&#26524;&#35041;&#38754;&#29992;&#20102; <code>GeometryReader</code>&#65292;&#25105;&#23601;&#26371;&#24819;&#35430;&#35430;&#30475;&#33021;&#21542;&#19981;&#20351;&#29992;&#23427;&#32780;&#36948;&#21040;&#19968;&#27171;&#30340;&#25490;&#29256;&#25928;&#26524;&#12290;</p><p>&#32080;&#26524;&#65292;&#22823;&#37096;&#20998;&#24773;&#27841;&#21487;&#20197;&#19981;&#38656;&#35201; <code>GeometryReader</code>&#12290;</p><p>&#36889;&#20301; Apple &#24037;&#31243;&#24107;&#30340;&#25512;&#25991;&#20063;&#26159;&#25402;&#26377;&#36259;&#30340;&#65306;</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/harlanhaskins/status/1501582946616045570&quot;,&quot;full_text&quot;:&quot;my new life&#8217;s mission is stopping anyone I can from using GeometryReader if possible&quot;,&quot;username&quot;:&quot;harlanhaskins&quot;,&quot;name&quot;:&quot;Harlan Haskins&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Wed Mar 09 15:37:27 +0000 2022&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:9,&quot;like_count&quot;:228,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>&#22826;&#22810; SO &#31572;&#26696;&#29992;&#20102; <code>GeometryReader</code> &#24456;&#38627;&#19981;&#25220;&#21040;&#12290;&#31561;&#20320;&#36319; SwiftUI &#27604;&#36611;&#29087;&#20197;&#24460;&#65292;&#21487;&#20197;&#22238;&#38957;&#30475;&#30475;&#20197;&#21069;&#23531;&#30340; <code>GeometryReader</code> &#26159;&#19981;&#26159;&#21487;&#20197;&#25913;&#25104;&#26356;&#31777;&#21934;&#30340;&#26041;&#27861;&#12290;</p><h2><strong>&#128581;&#19981;&#35201;&#20351;&#29992; <a href="https://developer.apple.com/documentation/swiftui/anyview">AnyView</a></strong></h2><p><code>AnyView</code> &#26159;&#20491; type-erasure &#30340; <code>View</code>&#12290;&#25563;&#35328;&#20043;&#65292;&#23427;&#26371;&#25273;&#38500; <code>View</code> &#26412;&#36523;&#30340;&#22411;&#21029;&#36039;&#35338;&#65292;&#23565;&#26044; SwiftUI &#35672;&#21029;&#26159;&#21542;&#38656;&#35201;&#26356;&#26032;&#30059;&#38754;&#26371;&#36896;&#25104;&#22256;&#38627;&#65292;&#19988;&#28010;&#36027;&#25928;&#33021;&#12290;</p><p>&#32085;&#22823;&#22810;&#25976;&#24773;&#27841;&#20320;&#37117;&#19981;&#38656;&#35201;&#29992;&#21040;&#12290;&#20320;&#21487;&#33021;&#26371;&#22312;&#26576;&#20123; StackOverflow &#31572;&#26696;&#30475;&#21040;&#23427;&#65292;&#36890;&#24120;&#26159;&#37679;&#30340;&#12290;</p><p>&#19981;&#20570;&#35299;&#37323;&#21482;&#23531;&#38364;&#37749;&#23383;&#30340;&#26367;&#20195;&#26041;&#26696;&#65306; <code>@ViewBuilder</code> + <code>some View</code>&#65292;&#25110;&#29992; <code>Group</code> &#25226; View &#21253;&#36215;&#20358;&#12290;</p><h2><strong>&#128581;&#22826;&#24613;&#33879;&#20351;&#29992; <a href="https://developer.apple.com/documentation/combine/observableobject">ObservableObject</a></strong></h2><p>&#36889;&#40670;&#32020;&#23660;&#25105;&#20491;&#20154;&#24847;&#35211;&#12290;</p><p>&#22823;&#37096;&#20998; SwiftUI &#25945;&#23416;&#65292;&#24456;&#26089;&#23601;&#25226; <code>@State</code>&#12289;<code>@Binding</code>&#12289;<code>@ObservedObject</code>&#12289;<code>@StateObject</code>&#12289;<code>@EnvironmentObject</code> &#31561; property wrapper &#25945;&#32102;&#20320;&#12290;</p><p>&#32080;&#26524;&#23601;&#26159;&#65292;&#35377;&#22810;&#20154;&#38283;&#26032;&#30059;&#38754;&#35201;&#22622;&#36039;&#26009;&#26178;&#30340;&#36215;&#25163;&#24335;&#35722;&#25104;&#19968;&#23450;&#35201;&#20358;&#20491; <code>ObservableObject</code>&#65306;</p><pre><code>class FooViewModel: ObservableObject { // &#30495;&#30340;&#38656;&#35201; class &#21966;&#65311;
  @Published var flag: Bool
  @Published var items: [Item]
  // init...
}

// &#25918;&#22312; FooView &#35041;&#65306;
// @StateObject var viewModel: FooViewModel</code></pre><p>&#20294;&#26159;&#65292;&#25105;&#20497;&#36890;&#24120;&#37117;&#26159;&#20808;&#29992; struct &#25110;&#26159;&#20854;&#20182; value type &#20358;&#25918;&#36039;&#26009;&#65292;&#25152;&#20197; <code>@State</code> &#23601;&#22816;&#20102;&#12290;&#25563;&#20491;&#35282;&#24230;&#20358;&#35498;&#65292;&#22914;&#26524;&#26159;&#35201;&#23416;&#32722; SwiftUI &#25490;&#29256;&#65292;&#37027;&#20320;&#21482;&#38656;&#35201; <code>@State</code>&#12290;</p><pre><code>struct FooViewModel {
  var flag: Bool
  var items: [Item]
}

// &#25918;&#22312; FooView &#35041;&#65306;
// @State var viewModel: FooViewModel</code></pre><p>&#30070;&#23560;&#26696;&#35722;&#22823;&#26178;&#65292;&#36039;&#26009;&#30340;&#30906;&#26377;&#21487;&#33021;&#26159; reference type&#65292;&#23601;&#26371;&#29992;&#19978; <code>ObservableObject</code>&#65292;&#20294;&#26681;&#25818;&#25105;&#30340;&#32147;&#39511;&#65292;&#21021;&#26399;&#20808;&#25226; <code>@State</code> &#36319; <code>@Binding</code> &#36889;&#20841;&#20491;&#29992;&#29087;&#23601;&#22909;&#20102;&#12290;</p><h2><strong>&#128581;&#36991;&#20813;&#20351;&#29992; <a href="https://developer.apple.com/documentation/swiftui/environmentobject/">@EnvironmentObject</a></strong></h2><p><code>@ObservedObject</code>&#12289;<code>@StateObject</code>&#12289;<code>@EnvironmentObject</code> &#36889;&#24190;&#20491; property wrapper &#37117;&#20351;&#29992; <code>ObservableObject</code>&#65292;&#38656;&#27714;&#33287;&#21151;&#33021;&#20063;&#30053;&#26377;&#19981;&#21516;&#12290;</p><p>&#20854;&#20013;&#65292;&#25105;&#24375;&#28872;&#24314;&#35696;&#36991;&#20813;&#20351;&#29992; <code>@EnvironmentObject</code> &#12290;&#21363;&#20415;&#20320;&#24456;&#28165;&#26970;&#33258;&#24049;&#22312;&#24185;&#22043;&#65292;&#20197;&#24460;&#36996;&#26159;&#24456;&#26377;&#21487;&#33021;&#26371;&#23475;&#21040;&#33258;&#24049;&#12290;</p><p>&#20808;&#35611;&#20491;&#35264;&#24565;&#65306;</p><blockquote><p>Environment &#22312; SwiftUI &#35041;&#38754;&#25351;&#30340;&#26159;&#24478;&#19978;&#23652; <code>View</code> &#24448;&#19979;&#23652; <code>View</code> &#20659;&#36958;&#30340;&#26481;&#35199;&#12290;</p></blockquote><p>&#27604;&#22914;&#35498;&#65306;</p><pre><code>VStack { // &#19978;&#23652;
  HStack { // &#31532;&#20108;&#23652;
    Text("Hi") // &#26368;&#19979;&#23652;
  }
}
.font(.largeTitle) // &#27492; modifier &#30340;&#35373;&#23450;&#26371;&#30001;&#19978;&#24448;&#19979;&#27599;&#19968;&#23652;&#37117;&#30332;&#29983;&#25928;&#26524;&#65292;&#26368;&#19979;&#23652;&#30340; Text &#26371;&#21463;&#24433;&#38911;</code></pre><p>&#24456;&#22810; modifier &#26371;&#25226;&#36039;&#35338;&#24448;&#19979;&#23652;&#12300;&#20659;&#36958;&#12301;&#65292;&#20687;&#26159;&#36889;&#37002;&#30340; <code>.font</code>&#12290;&#22312;&#27010;&#24565;&#19978;&#25105;&#37117;&#31281;&#20043;&#28858; environment&#12290;</p><p>&#20320;&#21487;&#20197;&#24819;&#35211;&#65292;&#20687; <code>.font</code> &#36889;&#31278; modifier &#22914;&#26524;&#19981;&#23567;&#24515;&#21152;&#22312;&#24456;&#19978;&#23652;&#65292;&#37027;&#40636;&#25972;&#20491; app &#26377;&#24456;&#22810; <code>Text</code> &#37117;&#26371;&#34987;&#24433;&#38911;&#21040;&#20102;&#12290;&#38500;&#38750;&#20877;&#23531;&#19968;&#27425; <code>.font</code> &#25226;&#35373;&#23450;&#32102;&#12300;&#33995;&#25481;&#12301;&#12290;</p><p>&#31350;&#31455;&#21738;&#20123; modifier &#26377;&#36889;&#31278;&#29305;&#24615;&#65292;&#20854;&#23526;&#26159; SwiftUI &#19968;&#20491;&#24456;&#22823;&#30340;&#21021;&#23416;&#32773;&#38556;&#31001;&#12290;&#20320;&#21482;&#33021;&#19968;&#20491;&#19968;&#20491;&#22039;&#35430;&#12290;</p><p>Environment &#36889;&#27171;&#30340;&#26481;&#35199;&#65292;&#26368;&#36969;&#21512;&#21435;&#35373;&#23450;&#26576;&#31684;&#22285; app &#30059;&#38754;&#19968;&#33268;&#30340;&#34892;&#28858;&#12290;&#27604;&#22914;&#35498;&#65292;&#29992; <a href="https://developer.apple.com/documentation/swiftui/path/preferredcolorscheme(_:)">.preferredColorScheme</a> &#20358;&#35373;&#23450;&#26576;&#19968;&#37096;&#20998;&#30340;&#38913;&#38754;&#24375;&#21046; Dark Mode&#12290;</p><p>&#26377;&#19968;&#32068; API &#21483;&#20570; <a href="https://developer.apple.com/documentation/swiftui/capsule/environment(_:_:)/">.environment()</a> &#33287; <a href="https://developer.apple.com/documentation/swiftui/environment">@Environment var</a>&#12290;&#19978;&#23652;&#29992; <a href="https://developer.apple.com/documentation/swiftui/capsule/environment(_:_:)/">.environment()</a> &#35373;&#23450;&#65292;&#19979;&#23652;&#29992; <a href="https://developer.apple.com/documentation/swiftui/environment">@Environment var</a> &#35712;&#21462;&#12290;</p><p>&#22914;&#26524;&#20320;&#19981;&#23567;&#24515;&#30340;&#35441;&#65292;&#23601;&#26371;&#25226;&#35373;&#23450;&#30001;&#19978;&#24448;&#19979;&#25972;&#20491;&#33995;&#25481;&#12290;&#30070;&#28982;&#65292;&#38500;&#38750;&#36889;&#23601;&#26159;&#20320;&#24819;&#20570;&#30340;&#20107;&#24773;&#12290;</p><p>&#25199;&#20102;&#36889;&#40636;&#22810;&#65292;&#22238;&#21040;&#25105;&#20497;&#36889;&#19968;&#31680;&#35611;&#30340; <code>@EnvironmentObject</code>&#12290;&#23427;&#26159;&#19978;&#23652;&#29992; <a href="https://developer.apple.com/documentation/swiftui/ellipse/environmentobject(_:)/">.environmentObject()</a>&#22622;&#20837;&#29289;&#20214;&#65292;&#19979;&#23652;&#20351;&#29992; <a href="https://developer.apple.com/documentation/swiftui/environmentobject">@EnvironmentObject var</a> &#20358;&#35712;&#21462;&#33287;&#23531;&#20837;&#12290;</p><p>&#35531;&#27880;&#24847;&#65292;&#26159;&#35712;&#21462;&#33287;<strong>&#23531;&#20837;</strong>&#12290;</p><p><a href="https://developer.apple.com/documentation/swiftui/environment">@Environment</a> &#30340; init &#21443;&#25976;&#29992;&#26159; <code>KeyPath</code>&#65292;&#25152;&#20197;&#26159;&#21807;&#35712;&#12290;</p><p><a href="https://developer.apple.com/documentation/swiftui/environmentobject">@EnvironmentObject</a> &#25918;&#30340;&#26159; <code>ObservableObject</code>&#65292;&#21487;&#35712;&#21487;&#23531;&#12290;</p><p>&#35242;&#24859;&#30340;&#35712;&#32773;&#21834;&#65292;&#30332;&#25582;&#20320;&#30340;&#24819;&#20687;&#21147;&#21543;&#12290;&#26377;&#20160;&#40636;&#20107;&#24773;&#27604;&#19978;&#23652;&#28961;&#26781;&#20214;&#24433;&#38911;&#25152;&#26377;&#19979;&#23652;&#36996;&#35201;&#31967;&#31957;&#65311;&#23601;&#26159;&#19979;&#23652;&#21487;&#20197;&#21453;&#36942;&#20358;&#30452;&#25509;&#20462;&#25913;&#19978;&#23652;&#30340;&#29289;&#20214;&#21834;&#12290;</p><p>&#29289;&#20214;&#36039;&#26009;&#34987;&#35504;&#25913;&#20102;&#65292;&#35504;&#30693;&#36947;&#21834;&#12290;</p><p>&#22914;&#26524;&#36889;&#27171;&#20320;&#36996;&#19981;&#35258;&#24471;&#22353;<s>&#65288;&#32893;&#36215;&#20358;&#24456;&#20687; singleton&#65292;&#27794;&#21839;&#38988;&#21834;&#65281;&#65311;&#65289;</s>&#65292;&#36996;&#26377;&#19968;&#20214;&#20107;&#25105;&#27794;&#35498;&#12290;</p><p>&#22914;&#26524;&#20320;&#22312;&#19979;&#23652;&#23459;&#21578;&#20102; <code>@EnvironmentObject var</code>&#65292;&#20294;&#26159;&#19978;&#23652;&#27794;&#26377;&#20219;&#20309;&#22320;&#26041;&#36879;&#36942; <code>.environmentObject()</code>&#22622;&#20837;&#29289;&#20214;&#65292;&#37027;&#36889;&#20491; <code>View</code> &#20063;&#26371;&#30452;&#25509; crash &#32102;&#20320;&#30475;&#12290;</p><p><strong>&#25105;&#23526;&#22312;&#26159;&#24819;&#19981;&#21040;&#65292;&#38500;&#20102;&#25226;&#33258;&#24049;&#28856;&#27515;&#25110;&#26159;&#35201;&#25925;&#24847;&#22353;&#38538;&#21451;&#20197;&#22806;&#65292;&#28858;&#20160;&#40636;&#35201;&#29992;&#21040;&#36889;&#31278;&#34892;&#28858;&#30340; API &#21738;&#12290;</strong></p><p>&#22914;&#26524;&#20320;&#30495;&#30340;&#24456;&#24819;&#36328;&#23652;&#20659;&#36958;&#29289;&#20214;&#65292;&#20006;&#19988;&#24076;&#26395;&#19981;&#21516;&#23652;&#37117;&#21487;&#20197;&#23531;&#20837;&#65292;&#23527;&#21487;&#29992; <a href="https://developer.apple.com/documentation/swiftui/binding">@Binding</a> &#19968;&#23652;&#19968;&#23652;&#22320;&#23531;&#20986;&#20358;&#65292;&#33267;&#23569;&#20320;&#24456;&#28165;&#26970;&#26377;&#21738;&#20123;&#23652; <code>View</code> &#26371;&#29992;&#21040;&#12290;</p><p>SwiftUI &#38614;&#28982;&#24456;&#22909;&#23531;&#65292;&#20294;&#26159;&#19981;&#33021;&#20098;&#23531;&#12290;Environment &#23660;&#26044;&#38577;&#21547;&#34892;&#28858;&#65292;&#22312;&#22296;&#38538;&#38283;&#30332;&#20013;&#35201;&#29305;&#21029;&#23567;&#24515;&#20351;&#29992;&#12290;</p><h2><strong>&#32080;&#35542;</strong></h2><p>&#36996;&#26377;&#24456;&#22810;&#26481;&#35199;&#25105;&#35258;&#24471;&#19981;&#36969;&#21512; SwiftUI &#26032;&#25163;&#20351;&#29992;&#65292;&#19981;&#36942;&#36889;&#26399;&#30340;&#23383;&#25976;&#21448;&#29190;&#25481;&#20102;&#65292;&#21704;&#21704;&#12290;&#26377;&#27231;&#26371;&#20877;&#35036;&#20805;&#12290;</p><p>&#20197;&#21069;&#25105;&#30340;&#35264;&#24565;&#26159;&#65306;&#30433;&#37327;&#21578;&#35380;&#22823;&#23478;&#21738;&#35041;&#26377;&#22353;&#12289;&#24314;&#35696;&#36991;&#38283;&#12290;&#19981;&#36942;&#24460;&#20358;&#25105;&#30332;&#29694;&#65292;&#26377;&#20123;&#26178;&#20505;&#36996;&#26159;&#35201;&#35242;&#36523;&#32147;&#27511;&#65292;&#30693;&#36947;&#30171;&#25165;&#23416;&#24471;&#36215;&#20358;&#128517;&#12290;&#22240;&#27492;&#65292;&#25105;&#19981;&#21453;&#23565;&#20320;&#21435;&#29609;&#29609;&#30475;&#36889;&#26399;&#35611;&#21040;&#30340;&#36889;&#20123; API&#12290;</p><p>&#20063;&#27489;&#36814;&#36319;&#25105;&#20998;&#20139;&#20320;&#30340;&#36393;&#22353;&#32147;&#39511;&#12290;</p><div><hr></div><p>&#21916;&#27489;&#36889;&#31687;&#25991;&#31456;&#30340;&#35712;&#32773;&#65292;<strong><a href="https://www.patreon.com/ethanhuang13">&#35531;&#21040; Patreon &#35330;&#38321;</a></strong>&#25903;&#25345;&#25105;&#128591; &#25105;&#30340;&#30446;&#27161;&#26159;&#32047;&#31309;&#21040; 100 &#20301;&#25903;&#25345;&#32773;&#65292;&#30446;&#21069; <strong>23%</strong>&#12290;&#20063;&#35531;&#25353;&#19979;&#24859;&#24515;&#10084;&#65039;&#12289;&#30041;&#35328;&#128172;&#12289;&#22238;&#20449;&#9993;&#65039;&#33287;&#25105;&#20132;&#27969;&#12290;&#36889;&#20123;&#22238;&#39243;&#37117;&#26371;&#30452;&#25509;&#24433;&#38911;&#21040;&#25105;&#32380;&#32396;&#23531;&#20316;&#30340;&#21205;&#21147;&#33287;&#38971;&#29575;&#21908;&#12290;</p><p>&#24076;&#26395;&#20170;&#22825;&#30340;&#20839;&#23481;&#35731;&#20320;&#21487;&#20197;&#23569;&#36208;&#19968;&#20123;&#24398;&#36335;&#12290;&#25105;&#20497;&#19979;&#19968;&#26399;&#35211;&#65281;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.ethanhuang13.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading 13 &#30340; Apple &#38283;&#30332;&#32773;&#38651;&#23376;&#22577;! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[SwiftUI 專欄 #2 有些題目還真不適合拿來入坑]]></title><description><![CDATA[SwiftUI &#35712;&#23436;&#23601;&#20837;&#22353; 2022/06/17]]></description><link>https://www.ethanhuang13.com/p/swiftui-2-the-good-the-bad</link><guid isPermaLink="false">https://www.ethanhuang13.com/p/swiftui-2-the-good-the-bad</guid><dc:creator><![CDATA[13]]></dc:creator><pubDate>Thu, 16 Jun 2022 22:00:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1cab56-8dfb-4e93-996d-2c49ffcef74f_2498x1414.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>13 &#30340;&#35441;</strong></p><blockquote><p>&#22914;&#26524;&#20320;&#26159;&#31532;&#19968;&#27425;&#35712;&#36889;&#20491;&#23560;&#27396;&#65292;&#24314;&#35696;<a href="https://www.ethanhuang13.com/p/swiftui-index">&#20808;&#24478;&#38957;&#29031;&#38918;&#24207;&#38321;&#35712;</a>&#12290;</p><p>SwiftUI &#23560;&#27396;&#26159;&#19968;&#20491;&#20184;&#36027;&#23560;&#27396;&#65292;&#21482;&#26159;&#25105;&#27794;&#26377;&#35373;&#31435;&#20184;&#36027;&#29254;&#65292;&#32780;&#26159;&#25505;&#29992;&#12300;&#35488;&#23526;&#35330;&#38321;&#12301;&#21046;&#24230;&#12290;</p><p>&#25105;&#30340;&#30446;&#27161;&#26159;&#32047;&#31309;&#21040; 100 &#20301; <a href="https://www.patreon.com/ethanhuang13">Patreon</a> &#25903;&#25345;&#32773;&#65292;&#30446;&#21069;&#36914;&#24230;&#20358;&#21040; <strong>16%</strong>&#65292;&#24863;&#35613;&#26032;&#33290;&#26379;&#21451;&#20497;&#30340;&#25903;&#25345;&#12290;</p><p>&#19978;&#36913;&#65292;&#26377;&#20301;&#26379;&#21451;&#35373;&#23450;&#20102;&#27599;&#20491;&#26376; $13 &#36889;&#20491;&#37329;&#38989;&#65292;&#25105;&#35258;&#24471;&#22826;&#26377;&#21109;&#24847;&#20102;&#10084;&#65039;&#65292;&#26044;&#26159;&#25226;&#37329;&#38989;&#25913;&#25104; $5&#12289;$13 &#20841;&#31278;&#12290;&#20839;&#23481;&#26159;&#19968;&#27171;&#30340;&#65292;&#37329;&#38989;&#24046;&#30064;&#21482;&#22312;&#26044;&#20320;&#35258;&#24471;&#25105;&#25552;&#20379;&#20102;&#22810;&#23569;&#20729;&#20540;&#12289;&#33258;&#34892;&#36984;&#25799;&#12290;</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RjcV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a68e427-cfa8-4c37-ac8d-e7d6f0965d44_2032x1072.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RjcV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a68e427-cfa8-4c37-ac8d-e7d6f0965d44_2032x1072.png 424w, https://substackcdn.com/image/fetch/$s_!RjcV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a68e427-cfa8-4c37-ac8d-e7d6f0965d44_2032x1072.png 848w, https://substackcdn.com/image/fetch/$s_!RjcV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a68e427-cfa8-4c37-ac8d-e7d6f0965d44_2032x1072.png 1272w, https://substackcdn.com/image/fetch/$s_!RjcV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a68e427-cfa8-4c37-ac8d-e7d6f0965d44_2032x1072.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RjcV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a68e427-cfa8-4c37-ac8d-e7d6f0965d44_2032x1072.png" width="1456" height="768" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/6a68e427-cfa8-4c37-ac8d-e7d6f0965d44_2032x1072.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RjcV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a68e427-cfa8-4c37-ac8d-e7d6f0965d44_2032x1072.png 424w, https://substackcdn.com/image/fetch/$s_!RjcV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a68e427-cfa8-4c37-ac8d-e7d6f0965d44_2032x1072.png 848w, https://substackcdn.com/image/fetch/$s_!RjcV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a68e427-cfa8-4c37-ac8d-e7d6f0965d44_2032x1072.png 1272w, https://substackcdn.com/image/fetch/$s_!RjcV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a68e427-cfa8-4c37-ac8d-e7d6f0965d44_2032x1072.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>&#19978;&#31150;&#25308;&#30340; WWDC22 <a href="https://developer.apple.com/wwdc22/102">Platforms State of Union</a> &#20013;&#65292;Apple &#22312;&#29254;&#19978;&#25171;&#20986;&#12300;The best way to build an app is with Swift and SwiftUI&#12301;&#65292;&#36889;&#21477;&#35441;&#26377;&#31526;&#21512;&#23526;&#38555;&#24773;&#27841;&#21966;&#65311;</p><p>&#20170;&#22825;&#35201;&#20358;&#36319;&#22823;&#23478;&#32842;&#30340;&#23601;&#26159;&#26681;&#25818;&#32147;&#39511; SwiftUI &#36969;&#21512;&#20570;&#20160;&#40636;&#12289;&#19981;&#36969;&#21512;&#20570;&#20160;&#40636;&#12290;</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5XO5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1cab56-8dfb-4e93-996d-2c49ffcef74f_2498x1414.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5XO5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1cab56-8dfb-4e93-996d-2c49ffcef74f_2498x1414.png 424w, https://substackcdn.com/image/fetch/$s_!5XO5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1cab56-8dfb-4e93-996d-2c49ffcef74f_2498x1414.png 848w, https://substackcdn.com/image/fetch/$s_!5XO5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1cab56-8dfb-4e93-996d-2c49ffcef74f_2498x1414.png 1272w, https://substackcdn.com/image/fetch/$s_!5XO5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1cab56-8dfb-4e93-996d-2c49ffcef74f_2498x1414.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5XO5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1cab56-8dfb-4e93-996d-2c49ffcef74f_2498x1414.png" width="1456" height="824" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/df1cab56-8dfb-4e93-996d-2c49ffcef74f_2498x1414.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:824,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5XO5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1cab56-8dfb-4e93-996d-2c49ffcef74f_2498x1414.png 424w, https://substackcdn.com/image/fetch/$s_!5XO5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1cab56-8dfb-4e93-996d-2c49ffcef74f_2498x1414.png 848w, https://substackcdn.com/image/fetch/$s_!5XO5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1cab56-8dfb-4e93-996d-2c49ffcef74f_2498x1414.png 1272w, https://substackcdn.com/image/fetch/$s_!5XO5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1cab56-8dfb-4e93-996d-2c49ffcef74f_2498x1414.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>&#65288;<a href="https://www.ethanhuang13.com/p/swiftui-1-prepare-xcode">&#30475;&#21069;&#19968;&#26399;</a> &#183; <a href="https://www.ethanhuang13.com/p/swiftui-index">&#22238;&#23560;&#27396;</a> &#183; <a href="https://www.ethanhuang13.com/">&#22238;&#39318;&#38913;</a>&#65289;</p></blockquote><div><hr></div><h2><strong>&#128581;&#19981;&#36969;&#21512;&#26032;&#25163;&#23531; Widget</strong></h2><p>2020 &#24180;&#65292;iOS 14 &#25512;&#20986;&#30340; WidgetKit&#65292;&#23601;&#35201;&#27714;&#29992; SwiftUI &#38283;&#30332;&#12290;&#36889;&#20491;&#38480;&#21046;&#35731;&#24456;&#22810;&#20154;&#35258;&#24471;&#26159;&#20491;&#25509;&#35320;&#23416;&#32722; SwiftUI &#30340;&#22909;&#27231;&#26371;&#12290;</p><p>&#20294;&#26159;&#65292;<strong>&#29992; Widget &#20358;&#23416; SwiftUI&#65292;&#26159;&#25105;&#33021;&#24819;&#20687;&#21040;&#26368;&#31967;&#31957;&#30340;&#20837;&#38272;&#36335;&#32218;&#20102;&#12290;</strong></p><blockquote><p>&#38500;&#20102;&#25343;&#20358;&#23531; tvOS app &#20197;&#22806;&#65292;&#22240;&#28858;&#29992;&#30340;&#20154;&#23569;&#65292;&#22353;&#29305;&#21029;&#22810;&#127770;</p></blockquote><p>&#38283;&#30332;&#36942; watchOS app &#30340;&#25105;&#24456;&#24555;&#23601;&#24847;&#35672;&#21040;&#65292;WidgetKit &#30340;&#26412;&#36074;&#36319; Apple Watch &#37686;&#38754;&#12300;&#35079;&#38620;&#21151;&#33021;&#12301;&#65288;Complication&#65289;&#30340; <a href="https://developer.apple.com/documentation/clockkit">ClockKit</a> &#26159;&#31995;&#20986;&#21516;&#28304;&#30340;&#26481;&#35199;&#12290;</p><p>&#25563;&#35328;&#20043;&#65292;&#38283;&#30332;&#32773;&#35201;&#39221;&#19968;&#31995;&#21015;&#26178;&#38291;&#30340;&#38748;&#24907;&#36039;&#26009;&#32102;&#26694;&#26550;&#65292;&#19981;&#20687;&#33290;&#29256; Widget Extension &#21487;&#20197;&#20570;&#24456;&#22810;&#21363;&#26178;&#26356;&#26032;&#30340;&#25805;&#20316;&#12290;</p><blockquote><p>&#26524;&#19981;&#20854;&#28982;&#65292;&#20170;&#24180; watchOS 9 &#30340; ClockKit &#21453;&#36942;&#20358;&#34987; WidgetKit &#21462;&#20195;&#20102;&#128521;</p></blockquote><p>&#22914;&#26524;&#20320;&#27794;&#26377;&#23531;&#36942; Apple Watch Complication &#30340;&#35441;&#65292;&#30452;&#25509;&#20358;&#23531; Widget&#65292;&#21516;&#26178;&#21448;&#23416; SwiftUI&#65292;&#37027;&#23601;&#26159;<strong>&#38617;&#37325;&#38556;&#31001;</strong>&#65292;&#26371;&#38750;&#24120;&#30171;&#33510;&#12290;</p><p>&#26371;&#19981;&#30693;&#36947;&#21040;&#24213;&#26159;&#33258;&#24049;&#19981;&#25026; SwiftUI&#65292;&#36996;&#26159; WidgetKit &#21448;&#20986;&#27611;&#30149;&#20102;&#12290;&#25972;&#22825;&#25079;&#30097;&#20154;&#29983;&#65292;&#38918;&#24118;&#25226; SwiftUI &#31062;&#23447;&#21313;&#20843;&#20195;&#37117;&#21839;&#20505;&#23436;&#65288;UIKit &#34920;&#31034;&#8230;&#65289;&#12290;</p><p>&#25152;&#20197;&#25105;&#24314;&#35696;&#33267;&#23569;&#25226; SwiftUI &#30340;&#25490;&#29256;&#12289;<code>Shape</code> &#20043;&#39006;&#30340;&#23416;&#26371;&#65292;&#20877;&#20358;&#30896; WidgetKit&#12290;</p><h2><strong>&#128582;&#36969;&#21512;&#23531; Apple Watch App</strong></h2><p>&#21083;&#25165;&#35498;&#25105;&#23531;&#36942; watch app&#12290;SwiftUI &#21083;&#25512;&#20986;&#26178;&#65292;&#23601;&#26377;&#28040;&#24687;&#25351;&#20986;&#65306;SwiftUI &#26368;&#26089;&#26159;&#28858;&#20102;&#21462;&#20195; watchOS &#19978;&#30340; WatchKit Interface &#32780;&#35373;&#35336;&#30340;&#12290;&#25563;&#35328;&#20043;&#65292;&#21021;&#20195; SwiftUI &#26368;&#36969;&#21512;&#30340;&#38283;&#30332;&#24179;&#21488;&#20854;&#23526;&#26159; watchOS &#21834;&#12290;</p><p>&#22522;&#26044;&#36889;&#20491;&#21407;&#22240;&#65292;&#25105;&#30740;&#31350; SwiftUI &#26178;&#20808;&#20027;&#25915;&#38283;&#30332; watch app&#12290;&#20006;&#19988;&#22312; iPlayground 2019 &#35611;&#20102;&#19968;&#22580; &#10218;&#21021;&#20195; SwiftUI &#23601;&#29992;&#20358;&#23531; Watch App &#21543;&#65281;&#10219;&#65288;<a href="file:///var/folders/63/727ffb355vx8yd6lv0598y480000gn/T/com.soulmen.ulysses-setapp/c59613ae72dd4d019dfbeae5942352d2/SwiftUI%20%E5%B0%88%E6%AC%84%20%232%20%E6%9C%89%E4%BA%9B%E9%A1%8C%E7%9B%AE%E9%82%84%E7%9C%9F%E4%B8%8D%E9%81%A9%E5%90%88%E6%8B%BF%E4%BE%86%E5%85%A5%E9%96%80/[https://speakerdeck.com/ethanhuang13/chu-dai-swiftui-jiu-yong-lai-xie-watch-app-ba]">&#25237;&#24433;&#29255;&#36899;&#32080;</a>&#65289;</p><div id="youtube2-1cROaQ88adE" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;1cROaQ88adE&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/1cROaQ88adE?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><blockquote><p>&#36889;&#20123;&#19981;&#26159;&#20170;&#22825;&#30340;&#37325;&#40670;&#65292;&#21487;&#20197;&#19981;&#29992;&#30475;&#12290;</p><p>&#21516;&#26178;&#20320;&#25033;&#35442;&#21487;&#20197;&#29702;&#35299;&#28858;&#20160;&#40636;&#25105;&#30340; SwiftUI &#23416;&#32722;&#36335;&#32218;&#27794;&#26377;&#37027;&#40636;&#20663;&#23475;&#12290;&#21453;&#32780;&#22240;&#28858;&#23531; watch app &#30340;&#21516;&#26178;&#38918;&#20415;&#25630;&#25026;&#20102; ClockKit&#65292;&#23565;&#26044;&#38548;&#24180;&#23416; WidgetKit &#24456;&#26377;&#24171;&#21161;&#128526;</p></blockquote><p>&#32317;&#32780;&#35328;&#20043;&#65292;SwiftUI &#26159;&#24456;&#36969;&#21512;&#23531; watch app &#30340;&#26694;&#26550;&#12290;&#22240;&#28858;&#20043;&#21069;&#30340; WatchKit Interface &#23526;&#22312;&#26159;&#22826;&#29211;&#20102;&#12290;iOS app &#36996;&#21487;&#20197;&#29992;&#25343; UIKit &#36319; SwiftUI &#20570;&#27604;&#36611;&#65292;&#23531; watch app &#26681;&#26412;&#27794;&#24471;&#27604;&#12290;</p><p>&#20170;&#24180; WWDC &#36319;&#19968;&#20123;&#38283;&#30332;&#32773;&#20132;&#27969;&#26178;&#65292;&#32893;&#21040;&#20182;&#20497;&#35498;&#35258;&#24471;&#20170;&#24180;&#38283;&#22987;&#29305;&#21029;&#36969;&#21512;&#23531; watch app&#12290;&#29702;&#30001;&#26159;&#65292;&#22240;&#28858;&#35201;&#20570; iOS 16 Lock Screen Widget&#65292;&#36319; Watch Complication &#20114;&#36890;&#12290;</p><p>&#20294;&#25105;&#35258;&#24471;&#65292;2019 &#24180; watchOS 6 &#33021;&#25913;&#29992; SwiftUI &#23601;&#27604;&#20043;&#21069;&#22909;&#22826;&#22810;&#12290;&#21040;&#20102; watchOS 7 &#30340; SwiftUI &#21448;&#36914;&#27493;&#24456;&#22810;&#12290;</p><p>&#30495;&#35201;&#35498;&#20170;&#24180;&#38283;&#22987;&#36969;&#21512;&#23531;&#30340;&#29702;&#30001;&#22043;&#65292;&#25033;&#35442;&#26159; Xcode 14 &#23565;&#26044; watch app &#30340; Target &#31649;&#29702;&#31777;&#21270;&#20102;&#12290;&#20197;&#21069;&#20998;&#25104; Watch app &#33287; WatchKit Extension&#65292;&#20809;&#26159;&#25630;&#25026;&#20491;&#21029;&#27284;&#26696;&#35201;&#25918;&#21738;&#23601;&#25630;&#27515;&#20320;&#12290;</p><h2><strong>&#128581;&#19981;&#36969;&#21512;&#22312;&#38656;&#35201;&#25903;&#25588; iOS 13 &#25110;&#20197;&#19979;&#29256;&#26412;&#30340; App &#23566;&#20837;</strong></h2><p>SwiftUI &#26159; iOS 13 &#26178;&#25512;&#20986;&#30340;&#65292;&#37027;&#19968;&#29256;&#21839;&#38988;&#38750;&#24120;&#22810;&#12290;&#25105;&#23436;&#20840;&#19981;&#25512;&#34214;&#19968;&#20491;&#35201;&#27491;&#24335;&#19978;&#26550;&#12289;&#38656;&#35201;&#32380;&#32396;&#25903;&#25588; iOS 13 &#30340; app&#65292;&#29992; SwiftUI &#23531;&#12290;</p><p>&#36996;&#22909;&#65292;iOS 16 &#37117;&#24555;&#20986;&#20102;&#65292;&#25903;&#25588; iOS 13 &#30340;&#38656;&#27714;&#25033;&#35442;&#19981;&#39640;&#12290;&#36889;&#20063;&#26159;&#28858;&#20160;&#40636;&#25105;&#29694;&#22312;&#25165;&#38283;&#22987;&#23531; SwiftUI &#23560;&#27396;&#65292;&#20006;&#24375;&#35519;&#29694;&#22312;&#26159;&#38283;&#30332;&#32773;&#26368;&#22909;&#30340;&#20837;&#22353;&#26178;&#38291;&#12290;</p><p>&#32317;&#32780;&#35328;&#20043;&#65292;&#35201;&#29992; SwiftUI &#23531;&#35469;&#30495;&#30340;&#23560;&#26696;&#30340;&#35441;&#65292;&#35531;&#33267;&#23569;&#24478; iOS 14.0 &#38283;&#22987;&#25903;&#25588;&#12290;&#22914;&#26524;&#21487;&#20197;&#36984;&#25799;&#30340;&#35441;&#65292;&#26356;&#22909;&#30340;&#36984;&#38917;&#26159; iOS 14.2&#12289;&#20877;&#26356;&#22909;&#30340;&#36984;&#38917;&#26159; iOS 14.5&#12290;</p><p>&#28858;&#20160;&#40636;&#26159; <strong>iOS 14.2</strong>&#65311;&#36889;&#26159;&#22240;&#28858;&#26681;&#25818;&#23526;&#38555;&#32147;&#39511;&#65292;iOS 14.0 &#21040; .2 &#26377;&#19968;&#20123;&#22855;&#24618;&#30340; bug&#65292;&#24456;&#23481;&#26131;&#22312; runtime crash&#12290;&#21453;&#27491;&#36889;&#24190;&#20491;&#23567;&#29256;&#26412;&#22826;&#26089;&#26399;&#20102;&#65292;&#20351;&#29992;&#32773;&#24456;&#23569;&#12290;</p><p>&#28858;&#20160;&#40636; <strong>iOS 14.5</strong> &#21448;&#26356;&#22909;&#21602;&#65311;&#22240;&#28858;&#20462;&#22909;&#20102;&#19968;&#20491;&#38750;&#24120;&#22823;&#30340;&#22353;&#12290;</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/ethanhuang13/status/1377473539146588161&quot;,&quot;full_text&quot;:&quot;&#128371;&#65039;&#25105;&#38928;&#35328;&#36889;&#26159;&#26410;&#20358;&#20841;&#24180;&#65292;&#26032;&#25163; SwiftUI &#20351;&#29992;&#32773;&#26371;&#36935;&#21040;&#30340;&#26368;&#22823;&#22353;&#12290;&#22240;&#28858;&#23427;&#26159;&#22312; iOS 14.5 &#25165;&#25913;&#25481;&#65292;&#22914;&#26524;&#20320;&#35201;&#25903;&#25588; 13.0-14.4 &#32780;&#19988;&#27794;&#26377;&#32350;&#36942;&#12289;&#21448;&#27794;&#26377;&#28204;&#35430;&#21040;&#30340;&#35441;&#65292;&#23601;&#26371;&#26377;&#19968;&#20123;&#30059;&#38754;&#19981;&#26371; present &quot;,&quot;username&quot;:&quot;ethanhuang13&quot;,&quot;name&quot;:&quot;13&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Apr 01 04:10:58 +0000 2021&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/Ex3E4Z6U8AQeyfS.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/4R4VITDaup&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:21,&quot;like_count&quot;:88,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>&#25105;&#20497;&#20043;&#24460;&#26371;&#25214;&#27231;&#26371;&#22810;&#32842;&#36889;&#20491;&#22353;&#12290;&#29694;&#22312;&#20320;&#21482;&#35201;&#35352;&#24471; iOS 14.5 &#20197;&#19978;&#26368;&#20445;&#38570;&#65292;&#23601;&#22816;&#20102;&#12290;</p><blockquote><p>&#30070;&#28982;&#24460;&#38754;&#20063;&#36996;&#26377;&#26032;&#30340;&#22353;&#21862;&#65292;&#20294;&#24050;&#32147;&#23569;&#24456;&#22810;&#20102;&#12290;</p></blockquote><h2><strong>&#128581;&#19981;&#36969;&#21512;&#21462;&#20195;&#24050;&#32147;&#29992; UIKit &#23531;&#22909;&#30340;&#30059;&#38754;</strong></h2><p>&#19981;&#24314;&#35696;&#30340;&#26368;&#31777;&#21934;&#30340;&#29702;&#30001;&#26159;&#65292;&#20154;&#23478;&#27963;&#24471;&#22909;&#22909;&#30340;&#28858;&#20160;&#40636;&#35201;&#37325;&#20570;&#21602;&#65311;</p><p>&#38500;&#38750;&#20320;&#24050;&#32147;&#23565; SwiftUI &#24456;&#26377;&#25226;&#25569;&#65292;&#32780;&#19988;&#26377;&#20854;&#20182;&#20805;&#20998;&#30340;&#29702;&#30001;&#65292;&#19981;&#28982;&#25105;&#19968;&#40670;&#37117;&#19981;&#24314;&#35696;&#25226;&#26082;&#26377;&#30059;&#38754;&#29992; SwiftUI &#37325;&#23531;&#12290;<strong>&#22914;&#26524;&#37325;&#23531;&#20043;&#24460;&#35215;&#26684;&#19968;&#27169;&#19968;&#27171;&#65292;&#23565;&#26044; app &#30340;&#21830;&#26989;&#20729;&#20540;&#23436;&#20840;&#27794;&#26377;&#25552;&#21319;&#65292;&#20320;&#30340;&#29986;&#20540;&#20063;&#26371;&#26159; 0</strong>&#12290;</p><blockquote><p>&#29992; SwiftUI &#37325;&#23531;&#30059;&#38754;&#65292;&#20006;&#19981;&#33021;&#31639;&#26159;&#19968;&#31278;&#37325;&#27083;&#12290;&#25152;&#20197;&#12300;&#23560;&#26696;&#26371;&#35722;&#24471;&#26356;&#22909;&#32173;&#35703;&#12301;&#19981;&#33021;&#20316;&#28858;&#37325;&#23531;&#30340;&#29702;&#30001;&#12290;&#20309;&#27841;&#22914;&#26524;&#22296;&#38538;&#23565;&#26044; SwiftUI &#19981;&#22816;&#29087;&#24713;&#30340;&#35441;&#65292;&#24590;&#40636;&#33021;&#21028;&#26039;&#26371;&#26356;&#22909;&#32173;&#35703;&#21602;&#129322;</p></blockquote><p>&#38614;&#28982;&#25105;&#35498; SwiftUI &#19981;&#36969;&#21512;&#20358;&#25343;&#37325;&#20570; UIKit &#24050;&#32147;&#20570;&#22909;&#30340;&#30059;&#38754;&#65292;&#20294;&#26159;&#22914;&#26524;&#20320;&#20491;&#20154;&#24819;&#35201;&#23416;&#32722; SwiftUI&#65292;&#21448;&#19981;&#30693;&#36947;&#25343;&#20160;&#40636;&#30070;&#38988;&#30446;&#30340;&#35441;&#65292;&#12300;&#29992; SwiftUI &#35430;&#33879;&#37325;&#20570;&#26082;&#26377;&#30340;&#30059;&#38754;&#12301;&#26159;&#38750;&#24120;&#22909;&#30340;&#32244;&#32722;&#26041;&#24335;&#12290;</p><p>&#35531;&#30475;&#28165;&#26970;&#65292;&#25105;&#35498;&#30340;&#26159;&#32244;&#32722; SwiftUI&#65292;&#32780;&#19981;&#26159;&#23531;&#22909;&#20043;&#24460;&#21462;&#20195;&#25481;&#21407;&#26412;&#23560;&#26696;&#20013;&#30340;&#31243;&#24335;&#30908;&#12290;&#26082;&#26377;&#30059;&#38754;&#34920;&#31034;&#26377;&#29694;&#25104;&#30340;&#35215;&#26684;&#12289;UX&#65292;&#20320;&#21482;&#38656;&#35201;&#30740;&#31350;&#24590;&#40636;&#29992; SwiftUI &#37325;&#26032;&#23526;&#20316;&#12290;&#36942;&#31243;&#20013;&#21487;&#20197;&#39636;&#26371;&#21040; SwiftUI &#22312;&#25289;&#29256;&#38754;&#30340;&#24555;&#36895;&#65292;&#20063;&#26377;&#21487;&#33021;&#26371;&#36393;&#21040;&#38283;&#30332;&#36942;&#31243;&#30340;&#22353;&#12290;&#20294;&#37117;&#26159;&#21487;&#20197;&#25511;&#21046;&#30340;&#31684;&#22285;&#20839;&#12290;</p><blockquote><p>&#23567;&#25554;&#26354;&#65306;&#25105;&#23531;&#21040;&#36889;&#27573;&#26178;&#65292;&#21083;&#22909;&#26377;&#20154;&#36028;&#32102;&#25105;&#30475;&#35352;&#24115; app <a href="https://moze.app/">Moze</a> &#38283;&#30332;&#32773; Amos <a href="https://t.me/mozeapp/51468">&#25552;&#21040;&#29992; SwiftUI &#23531;&#26032;&#30340; iPad app</a>&#65292;&#20358;&#22238;&#25033;&#20351;&#29992;&#32773;&#25265;&#24616; app &#26356;&#26032;&#32233;&#24930;&#12290;</p><p>&#32147;&#36942;&#20182;&#30340;&#22823;&#26041;&#21516;&#24847;&#65292;&#25105;&#25226;&#37027;&#27573;&#35338;&#24687;&#25130;&#22294;&#22312;&#36889;&#37002;&#65306;</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0zyF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaf36741-d009-444b-8997-557df2099729_1434x1082.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0zyF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaf36741-d009-444b-8997-557df2099729_1434x1082.png 424w, https://substackcdn.com/image/fetch/$s_!0zyF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaf36741-d009-444b-8997-557df2099729_1434x1082.png 848w, https://substackcdn.com/image/fetch/$s_!0zyF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaf36741-d009-444b-8997-557df2099729_1434x1082.png 1272w, https://substackcdn.com/image/fetch/$s_!0zyF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaf36741-d009-444b-8997-557df2099729_1434x1082.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0zyF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaf36741-d009-444b-8997-557df2099729_1434x1082.png" width="1434" height="1082" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/caf36741-d009-444b-8997-557df2099729_1434x1082.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1082,&quot;width&quot;:1434,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0zyF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaf36741-d009-444b-8997-557df2099729_1434x1082.png 424w, https://substackcdn.com/image/fetch/$s_!0zyF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaf36741-d009-444b-8997-557df2099729_1434x1082.png 848w, https://substackcdn.com/image/fetch/$s_!0zyF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaf36741-d009-444b-8997-557df2099729_1434x1082.png 1272w, https://substackcdn.com/image/fetch/$s_!0zyF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaf36741-d009-444b-8997-557df2099729_1434x1082.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>Amos &#30340;&#36889;&#27573;&#35441;&#24456;&#23526;&#38555;&#22320;&#21453;&#26144;&#20986;&#38283;&#30332;&#32773;&#23566;&#20837;&#26032;&#25216;&#34899;&#30340;&#25361;&#25136;&#65292;&#20063;&#26159;&#24456;&#23542;&#36020;&#30340;&#32147;&#39511;&#20998;&#20139;&#12290;<a href="https://moze.app/">Moze</a> &#38614;&#28982;&#29992; SwiftUI &#37325;&#23531;&#26082;&#26377;&#30059;&#38754;&#65292;&#20294;&#26159;&#26159;&#22312;&#38283;&#30332;&#26032;&#30340; app&#65292;&#25105;&#35258;&#24471;&#26159;&#24456;&#20805;&#20998;&#30340;&#29702;&#30001;&#12290;</p><p>&#28858;&#20102;&#24863;&#35613;&#20182;&#39000;&#24847;&#25552;&#20379;&#32147;&#39511;&#20998;&#20139;&#65292;&#24171;&#20182;&#30340; app &#24291;&#21578;&#19968;&#19979;&#65306;&#23565;&#35352;&#24115;&#26377;&#38656;&#27714;&#30340;&#26379;&#21451;&#30475;&#30475; <a href="https://moze.app/">Moze</a>&#12290;</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hKmd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e67732-a174-4ee3-95d7-9ba658556eb0_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hKmd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e67732-a174-4ee3-95d7-9ba658556eb0_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!hKmd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e67732-a174-4ee3-95d7-9ba658556eb0_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!hKmd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e67732-a174-4ee3-95d7-9ba658556eb0_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!hKmd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e67732-a174-4ee3-95d7-9ba658556eb0_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hKmd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e67732-a174-4ee3-95d7-9ba658556eb0_1024x1024.png" width="82" height="82" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/e7e67732-a174-4ee3-95d7-9ba658556eb0_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:82,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hKmd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e67732-a174-4ee3-95d7-9ba658556eb0_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!hKmd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e67732-a174-4ee3-95d7-9ba658556eb0_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!hKmd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e67732-a174-4ee3-95d7-9ba658556eb0_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!hKmd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e67732-a174-4ee3-95d7-9ba658556eb0_1024x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Moze</figcaption></figure></div><blockquote><p>&#36889;&#19981;&#26159;&#26989;&#37197;&#12290;&#21478;&#22806;&#65292;&#25105;&#26377;&#21029;&#30340;&#38656;&#27714;&#65292;&#25152;&#20197;&#20006;&#38750; Moze &#20351;&#29992;&#32773;&#12290;</p></blockquote><h2><strong>&#128582;&#36969;&#21512;&#20570;&#26032;&#30340;&#30059;&#38754;&#25110; App</strong></h2><p>&#22914;&#26524;&#26159; UIKit &#23560;&#26696;&#35041;&#30340;&#20840;&#26032;&#30059;&#38754;&#65292;&#25110;&#26159;&#26082;&#26377;&#30059;&#38754;&#35201;&#22823;&#25913;&#29256;&#65292;&#37027;&#40636;&#25105;&#30340;&#24907;&#24230;&#23601;&#19981;&#19968;&#27171;&#20102;&#12290;</p><p>&#20320;&#21487;&#20197;&#35430;&#35430;&#30475;&#22312;&#20570;&#26032;&#30059;&#38754;&#26178;&#65292;&#20808;&#29992; SwiftUI &#20570;&#20491;&#27171;&#23376;&#12290;&#33836;&#19968;&#26377;&#20123;&#38656;&#27714;&#36948;&#19981;&#21040;&#65288;&#22312; iOS 13 &#30340; SwiftUI &#29305;&#21029;&#23481;&#26131;&#30332;&#29983;&#65292;&#25152;&#20197;&#25105;&#19978;&#38754;&#23601;&#35498;&#20102;&#8230;&#65289;&#65292;&#20877;&#32771;&#24942;&#29992; UIKit &#35036;&#36275;&#12290;</p><p>&#30070;&#28982;&#65292;&#22240;&#28858;&#25105;&#19981;&#30693;&#36947;&#20320;&#23565; SwiftUI &#30340;&#25484;&#25569;&#24230;&#24590;&#40636;&#27171;&#65292;&#27794;&#36774;&#27861;&#35498;&#36889;&#27171;&#20570;&#23601;&#19968;&#23450;&#27794;&#21839;&#38988;&#12290;&#20294;&#33267;&#23569;&#26032;&#30340;&#30059;&#38754;&#29992; SwiftUI &#20358;&#20570;&#65292;&#19968;&#23450;&#21487;&#20197;&#30465;&#19979;&#12300;&#21051;&#12301;&#30059;&#38754;&#30340;&#26178;&#38291;&#12290;</p><p>&#22914;&#26524;&#20320;&#29694;&#22312;&#23601;&#38283;&#22987;&#36889;&#40636;&#20570;&#65292;&#37027;&#40636;&#22353;&#26159;&#19968;&#23450;&#26371;&#36393;&#21040;&#30340;&#65292;&#22240;&#28858;&#36889;&#20491;&#23560;&#27396;&#36996;&#27794;&#20171;&#32057;&#21040; SwiftUI &#30340;&#22353;&#22043;&#129322;</p><blockquote><p>&#22238;&#38957;&#35299;&#31572;&#38283;&#38957;&#30340;&#21839;&#38988;&#12290;&#20854;&#23526;&#37027;&#24373;&#22294;&#29255;&#26159;&#39449;&#20154;&#30340;&#65292;&#25110;&#32773;&#35498; Apple &#30340;&#25237;&#24433;&#29255;&#26412;&#36523;&#23601;&#26039;&#31456;&#21462;&#32681;&#12290;<a href="https://twitter.com/joshshaffer?s=21&amp;t=VHGKHJLUsOBwHRIUD8xnHg">Josh Shaffer</a> &#30340;&#25972;&#21477;&#35441;&#26159;&#65288;&#25105;&#21152;&#31895;&#65289;&#65306;</p><p>Now, if you have an <strong>existing</strong> app, it's easy <strong>to adopt</strong> these new technologies <strong>incrementally</strong>.</p><p>And if you're <strong>new</strong> to our platforms or if you're starting <strong>a brand-new app</strong>, the best way to build an app is with Swift and <strong>SwiftUI</strong>.</p></blockquote><p>&#26159;&#30340;&#65292;SwiftUI &#36969;&#21512;&#23531;&#20840;&#26032;&#30340; app&#65292;&#23588;&#20854;&#26159; iOS &#36319; watchOS app&#12290;&#20294;&#35531;&#19981;&#35201;&#35712;&#21040;&#36889;&#35041;&#23601;&#21435;&#38283;&#20491;&#26032;&#23560;&#26696;&#65292;&#25105;&#20497;&#23560;&#27396;&#25165;&#21083;&#38283;&#22987;&#21602;&#12290;</p><p>SwiftUI &#20063;&#36969;&#21512; iOS &#38283;&#30332;&#32773;&#26032;&#25163;&#12290;&#21069;&#25552;&#26159;<a href="https://www.ethanhuang13.com/p/swiftui-0-get-a-m1?s=w">&#33267;&#23569;&#35201;&#26377;&#21488; M1 &#19981;&#28982;&#25105;&#26371;&#21240;&#36864;&#20320;</a>&#12290;</p><h2><strong>&#128582;&#36969;&#21512;&#23531; Prototype</strong></h2><p>&#22312;&#27714;&#32887;&#36942;&#31243;&#20013;&#65292;&#20598;&#29246;&#26371;&#26377;&#12300;&#23531;&#20316;&#26989;&#12301;&#30340;&#29872;&#31680;&#12290;&#36890;&#24120;&#26371;&#26159;&#20381;&#29031;&#38656;&#27714;&#23531;&#20491;&#23567; app &#25110;&#24190;&#20491;&#30059;&#38754;&#65292;&#23526;&#20316;&#19968;&#20123;&#20551;&#30340;&#21151;&#33021;&#12290;</p><p>&#36889;&#31278;&#24773;&#27841;&#38750;&#24120;&#36969;&#21512;&#29992; SwiftUI &#20358;&#23531;&#12290;&#22240;&#28858;&#23531;&#20316;&#26989;&#36890;&#24120;&#19981;&#26371;&#38480;&#21046;&#20320;&#30340;&#24037;&#20855;&#25110;&#31995;&#32113;&#29256;&#26412;&#65292;&#20294;&#26159;&#26377;&#26178;&#38291;&#22739;&#21147;&#65292;&#20320;&#20063;&#19981;&#26371;&#24819;&#33457;&#22826;&#22810;&#26178;&#38291;&#22312;&#19978;&#38754;&#12290;&#25105;&#26368;&#36817;&#19968;&#27425;&#27714;&#32887;&#32147;&#39511;&#65292;&#23601;&#29992; SwiftUI &#23531;&#20102;&#20841;&#27425;&#20316;&#26989;&#65292;&#37117;&#30456;&#30070;&#36805;&#36895;&#19988;&#36629;&#39686;&#65288;&#30070;&#28982;&#65292;&#37027;&#20841;&#27425;&#20063;&#37117;&#36890;&#36942;&#38364;&#21345;&#65289;&#12290;</p><p>&#25110;&#32773;&#26377;&#30340;&#26178;&#20505;&#22312;&#22296;&#38538;&#35041;&#65292;&#28858;&#20102;&#28317;&#36890;&#26576;&#20123; app &#30340; UX&#65292;&#38656;&#35201;&#23637;&#31034;&#29305;&#23450;&#30340;&#27969;&#31243;&#25110;&#30059;&#38754;&#65292;SwiftUI &#20063;&#24456;&#36969;&#21512;&#12290;</p><p>&#20687;&#25105;&#23601;&#22312;&#19968;&#27425;&#20844;&#21496;&#20839;&#37096;&#30340;&#25552;&#26696;&#31478;&#36093;&#20013;&#65292;&#28858;&#20102;&#39511;&#35657;&#26576;&#20491;&#27010;&#24565;&#30340;&#21487;&#34892;&#24615;&#65292;&#29992; SwiftUI &#24555;&#36895;&#23531;&#20986;&#20102;&#30475;&#36215;&#20358;&#24456;&#30495;&#23526;&#30340;&#27969;&#31243;&#21407;&#22411;&#12290;&#26368;&#24460;&#20063;&#22240;&#28858;&#12300;&#21487;&#34892;&#24615;&#30475;&#36215;&#20358;&#26368;&#39640;&#12301;&#65288;&#20854;&#20182;&#32068;&#21029;&#21482;&#33021;&#21576;&#29694;&#25237;&#24433;&#29255;&#65289;&#32780;&#29554;&#29518;&#12290;</p><h2><strong>&#128582;&#36969;&#21512;&#23531; Side Project</strong></h2><p>&#26368;&#20027;&#35201;&#21407;&#22240;&#26159;&#65292;side project &#23436;&#20840;&#22312;&#20320;&#25163;&#19978;&#12290;&#35201;&#25903;&#25588;&#26368;&#26032;&#30340;&#20316;&#26989;&#31995;&#32113;&#65292;&#27794;&#21839;&#38988;&#12290;&#35201;&#21152;&#26576;&#20491;&#23526;&#39511;&#21151;&#33021;&#65292;&#27794;&#21839;&#38988;&#12290;&#30332;&#29694; SwiftUI &#19981;&#33021;&#23526;&#29694;&#20320;&#24819;&#35201;&#30340;&#35373;&#35336;&#65292;&#21482;&#33021;&#25563;&#25481;&#65292;&#27794;&#21839;&#38988;&#12290;</p><p>&#24310;&#20280;&#19978;&#38754;&#35611;&#21040; SwiftUI &#38283;&#30332; prototype &#20043;&#24555;&#36895;&#12290;&#30070;&#24819;&#21040;&#26576;&#20491;&#40670;&#23376;&#26178;&#65292;&#21487;&#20197;&#31435;&#21051;&#25171;&#38283;&#20491;&#26032;&#23560;&#26696;&#23531;&#23531;&#30475;&#12290;</p><p>&#25105;&#20491;&#20154;&#30340;&#32147;&#39511;&#26159;&#65292;&#20570;&#20491;&#33021;&#22816;&#39511;&#35657;&#26576;&#20491;&#40670;&#23376;&#26159;&#21542;&#21487;&#34892;&#30340;&#23567;&#23560;&#26696;&#65292;&#36890;&#24120;&#26159;&#29992;&#23567;&#26178;&#22312;&#35336;&#31639;&#30340;&#12290;&#20063;&#23601;&#26159;&#35498;&#38728;&#24863;&#19968;&#20358;&#65292;&#12300;&#36225;&#36889;&#20491;&#36913;&#26411;&#29992; SwiftUI &#23531;&#20986;&#19968;&#20491;&#33258;&#24049;&#29992;&#30340;&#23567; app&#12301;&#65292;&#26159;&#23436;&#20840;&#21487;&#34892;&#30340;&#12290;</p><h2><strong>&#128582;&#36969;&#21512;&#23531;&#33258;&#35330;&#24615;&#39640;&#30340;&#30059;&#38754;</strong></h2><p>SwiftUI &#36229;&#36969;&#21512;&#20570;&#19968;&#20123;&#29992; UIKit &#25490;&#29256;&#36215;&#20358;&#26371;&#24456;&#30171;&#33510;&#30340;&#26481;&#35199;&#12290;&#27604;&#22914;&#19968;&#20123;&#38750;&#27161;&#28310;&#20803;&#20214;&#12289;&#35201;&#22823;&#37327;&#12300;&#25163;&#21051;&#12301;&#30340;&#26481;&#35199;&#12289;&#36681;&#22580;&#21205;&#30059;&#12290;</p><p>&#25105;&#30340; SwiftUI &#12300;&#21855;&#33945;&#12301;&#26159; <a href="https://designcode.io/">Design+Code</a> &#30340;&#35506;&#31243;&#65292;&#35373;&#35336;&#24107; <a href="https://twitter.com/mengto">Meng To</a> &#21109;&#36774;&#30340;&#25945;&#23416;&#32178;&#31449;&#12290;</p><p>WWDC19 &#23459;&#20296; SwiftUI &#19981;&#20037;&#20043;&#24460;&#65292;Meng &#23601;&#38283;&#22987;&#25512;&#20986;&#29992; iOS 13 &#23531; SwiftUI &#30340;&#35506;&#31243;&#12290;&#20182;&#24478;&#35373;&#35336;&#24107;&#30340;&#35282;&#24230;&#20358;&#23531; app&#65292;&#20805;&#20998;&#30332;&#25582;&#20102; SwiftUI &#30340;&#23560;&#38263;&#65306;&#25152;&#35211;&#21363;&#25152;&#24471;&#12289;&#24555;&#36895;&#35519;&#25972;&#29256;&#22411;&#12289;&#39640;&#24230;&#33258;&#35330;&#24615;&#12289;&#37239;&#28843;&#30340;&#36681;&#22580;&#21205;&#30059;&#12290;Design+Code &#36805;&#36895;&#29190;&#32005;&#65292;&#21426;&#23475;&#21040;&#36899; Apple &#37117;&#36319;&#20182;&#36023;&#35506;&#31243;&#12290;</p><p>&#19981;&#36942;&#20320;&#19981;&#29992;&#19978;&#20182;&#30340;&#35506;&#65292;&#21482;&#35201;&#30475;&#19968;&#19979; <a href="https://twitter.com/mengto">Twitter &#24115;&#34399;</a>&#35041;&#38754;&#30340; SwiftUI &#25945;&#23416;&#30701;&#29255;&#65292;&#23601;&#21487;&#20197;&#26377;&#19968;&#20123;&#21360;&#35937;&#12290;&#25105;&#38568;&#20415;&#25918;&#19968;&#20491;&#65306;</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/mengto/status/1529876329897807875&quot;,&quot;full_text&quot;:&quot;I built this SwiftUI app to teach animations. The course is out and completely free! &#128588;\n<a class=\&quot;tweet-url\&quot; href=\&quot;https://designcode.io/swiftui-rive-animated-app\&quot;>designcode.io/swiftui-rive-a&#8230;</a>\n\nThanks to <span class=\&quot;tweet-fake-link\&quot;>@rive_app</span> for the sponsorship &quot;,&quot;username&quot;:&quot;MengTo&quot;,&quot;name&quot;:&quot;Meng To&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu May 26 17:25:15 +0000 2022&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://substackcdn.com/image/upload/w_728,c_limit/l_twitter_play_button_rvaygk,w_120/ciq8v9pbljdnvgew8w5z&quot;,&quot;link_url&quot;:&quot;https://t.co/EOqgOTywOu&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:115,&quot;like_count&quot;:677,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:&quot;https://video.twimg.com/ext_tw_video/1529871024493412355/pu/vid/640x360/bc4O1UZo9GyScayI.mp4?tag=14&quot;,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>&#30475;&#21040;&#37027;&#20123;&#21205;&#30059;&#20102;&#21966;&#65292;SwiftUI &#26159;&#37027;&#27171;&#12300;&#29609;&#12301;&#30340;&#12290;</p><p>&#25152;&#20197;&#25105;&#25171;&#24478;&#19968;&#38283;&#22987;&#23416; SwiftUI &#30340;&#35264;&#24565;&#23601;&#19981;&#26159;&#12300;SwiftUI &#35201;&#24590;&#40636;&#21462;&#20195; UIKit&#12301;&#65292;&#32780;&#26159;&#12300;&#30475;&#36215;&#20358; SwiftUI &#24456;&#25797;&#38263;&#26576;&#20123;&#26481;&#35199;&#65292;&#24819;&#25226;&#23427;&#30340;&#37027;&#20123;&#20778;&#40670;&#30332;&#25582;&#20986;&#20358;&#12301;&#12290;&#25105;&#24076;&#26395;&#35712;&#32773;&#20063;&#33021;&#26377;&#36889;&#27171;&#30340;&#35264;&#24565;&#12290;</p><p>&#22914;&#26524;&#20320;&#33258;&#24049;&#26371;&#35373;&#35336;&#65292;&#23601;&#21487;&#20197;&#22823;&#33213;&#22320;&#23526;&#39511;&#12290;&#22914;&#26524;&#20320;&#19981;&#26371;&#35373;&#35336;&#65292;&#33267;&#23569;&#36319;&#35373;&#35336;&#24107;&#21512;&#20316;&#26178;&#20063;&#33021;&#35342;&#35542;&#24590;&#40636;&#36939;&#29992; SwiftUI &#30340;&#29305;&#33394;&#12290;</p><h2><strong>&#32080;&#35542;</strong></h2><p>&#36942;&#21435;&#65292;&#25105;&#22312;&#24456;&#22810;&#22580;&#21512;&#37117;&#35611;&#21040;&#36942;&#65306;SwiftUI &#36319; UIKit &#38750;&#24120;&#19981;&#19968;&#27171;&#65292;&#29978;&#33267; UIKit &#30340;&#26082;&#23450;&#35264;&#24565;&#26371;&#23565;&#23416;&#32722; SwiftUI &#26377;&#36000;&#38754;&#30340;&#24433;&#38911;&#12290;</p><p>&#25105;&#29468;&#22823;&#37096;&#20998;&#35712;&#32773;&#37117;&#26159; iOS &#38283;&#30332;&#32773;&#65292;&#20006;&#19988;&#29087;&#24713;&#29992; UIKit &#38283;&#30332; iOS app&#12290;&#25152;&#20197;&#23416;&#32722; SwiftUI &#26178;&#65292;&#24471;&#25291;&#26820;&#24456;&#22810;&#20358;&#33258; UIKit &#30340;&#32722;&#24931;&#33287;&#20551;&#35373;&#12290;&#28858;&#20102;&#36948;&#21040;&#36889;&#20491;&#30446;&#30340;&#65292;&#20043;&#24460;&#30340;&#23560;&#27396;&#35041;&#38754;&#65292;&#25105;&#26371;&#30433;&#21487;&#33021;&#22320;&#25226; SwiftUI &#30070;&#20316;&#20840;&#26032;&#30340;&#26481;&#35199;&#20358;&#25945;&#65292;&#32780;&#19981;&#26371;&#29992; UIKit &#20316;&#28858;&#23565;&#29031;&#12290;</p><p>&#27604;&#22914;&#35498;&#65292;SwiftUI &#30340; <code>Text</code> &#36319; UIKit &#30340; <code>UILabel</code> &#23436;&#20840;&#26159;&#19981;&#19968;&#27171;&#30340;&#26481;&#35199;&#12290;&#32102;&#20320;&#30475;&#30475;&#26368;&#36817;&#24190;&#22825;&#65292;&#21069; SwiftUI &#24037;&#31243;&#24107; Natalia Panferova &#36028;&#30340;&#31243;&#24335;&#30908;&#65306;</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/natpanferova/status/1536589280616714240&quot;,&quot;full_text&quot;:&quot;In addition to being able to place SwiftUI Text modifiers anywhere in the hierarchy on iOS 16, we can also easily clear the value set higher up in the hierarchy anywhere further down, even inside a Text view for a specific portion of text. &quot;,&quot;username&quot;:&quot;natpanferova&quot;,&quot;name&quot;:&quot;Natalia Panferova&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Jun 14 06:00:07 +0000 2022&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FVMPZaLUYAENTVU.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/CSaribHdkP&quot;,&quot;alt_text&quot;:&quot;Screenshot of code demonstrating how to set text modifiers on a VStack and clear the values further down the hierarchy on a specific Text view.\n\nThe actual code is:\n\nstruct ContentView: View {\n    var body: some View {\n        VStack {\n            // Reset font weight to default value\n            // for the word \&quot;special\&quot;\n            Text(\&quot;\&quot;\&quot;\n                Some text with a \\(Text(\&quot;special\&quot;).fontWeight(nil)) word\n            \&quot;\&quot;\&quot;)\n            // Reset foreground color to default value\n            .foregroundColor(nil)\n            \n            // Has thin font weight\n            // and secondary foreground color\n            Text(\&quot;Some text\&quot;)\n        }\n        .fontWeight(.thin)\n        .foregroundColor(.secondary)\n    }\n}&quot;}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:25,&quot;like_count&quot;:179,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p><code>Text</code> &#30340;&#21443;&#25976;&#21487;&#20197;&#25918; <code>Text</code>&#65292;&#36996;&#21487;&#20197;&#21152; modifier&#65281;&#129327;</p><p>&#30475;&#21040;&#36889;&#31278;&#31243;&#24335;&#30908;&#65292;<strong>&#22914;&#26524;&#19981;&#25226; UIKit &#19999;&#25481;&#30340;&#35441;&#65292;&#26681;&#26412;&#27794;&#36774;&#27861;&#24605;&#32771;</strong>&#12290;</p><p>SwiftUI &#30340; <code>Color</code> &#20063;&#36319; <code>UIColor</code> &#23436;&#20840;&#19981;&#21516;&#12290;&#19979;&#19968;&#26399;&#25105;&#20497;&#23601;&#24478;&#23427;&#38283;&#22987;&#12290;</p><div><hr></div><p>&#21916;&#27489;&#36889;&#31687;&#25991;&#31456;&#30340;&#35712;&#32773;&#65292;<strong><a href="https://www.patreon.com/ethanhuang13">&#35531;&#21040; Patreon &#35330;&#38321;</a></strong>&#25903;&#25345;&#25105;&#128591; &#25105;&#30340;&#30446;&#27161;&#26159;&#32047;&#31309;&#21040; 100 &#20301;&#25903;&#25345;&#32773;&#65292;&#30446;&#21069; <strong>16%</strong>&#12290;&#20063;&#35531;&#25353;&#19979;&#24859;&#24515;&#10084;&#65039;&#12289;&#30041;&#35328;&#128172;&#12289;&#22238;&#20449;&#9993;&#65039;&#33287;&#25105;&#20132;&#27969;&#12290;&#36889;&#20123;&#22238;&#39243;&#37117;&#26371;&#30452;&#25509;&#24433;&#38911;&#21040;&#25105;&#32380;&#32396;&#23531;&#20316;&#30340;&#21205;&#21147;&#33287;&#38971;&#29575;&#21908;&#12290;</p><p>&#24076;&#26395;&#20170;&#22825;&#30340;&#20839;&#23481;&#35731;&#20320;&#21487;&#20197;&#23569;&#36208;&#19968;&#20123;&#24398;&#36335;&#12290;&#25105;&#20497;&#19979;&#19968;&#26399;&#35211;&#65281;</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI 專欄 #1 來把 Xcode 搞好]]></title><description><![CDATA[SwiftUI &#35712;&#23436;&#23601;&#20837;&#22353; 2022/06/10]]></description><link>https://www.ethanhuang13.com/p/swiftui-1-prepare-xcode</link><guid isPermaLink="false">https://www.ethanhuang13.com/p/swiftui-1-prepare-xcode</guid><dc:creator><![CDATA[13]]></dc:creator><pubDate>Fri, 10 Jun 2022 10:00:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F335bfdf6-fa8e-433e-9f91-ea4bf26aeb9c_948x800.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4><strong>13 &#30340;&#35441;</strong></h4><blockquote><p>&#36889;&#36913;&#26159; Apple &#32102;&#38283;&#30332;&#32773;&#19968;&#24180;&#19968;&#24230;&#30340; WWDC&#65292;SwiftUI &#30340;&#26356;&#26032;&#30070;&#28982;&#20063;&#26159;&#37325;&#38957;&#25138;&#12290;&#19981;&#36942;&#27794;&#26377;&#24433;&#38911;&#21040;&#26412;&#23560;&#27396;&#30340;&#35215;&#21123;&#65292;&#36996;&#35531;&#25918;&#24515;&#29031;&#36914;&#24230;&#30475;&#19979;&#21435;&#12290;</p><p><a href="https://www.ethanhuang13.com/p/swiftui-0-get-a-m1">&#19978;&#19968;&#26399;</a>&#26159; <a href="https://www.ethanhuang13.com/p/swiftui-index">SwiftUI &#23560;&#27396;</a>&#21103;&#21002;&#30340;&#31532; 0 &#26399;&#65292;&#36996;&#21916;&#27489;&#37027;&#27171;&#30340;&#39080;&#26684;&#21966;&#65311;&#22914;&#26524;&#36996;&#27794;&#35712;&#36942;&#65292;&#35531;&#20808;&#22238;&#21435;&#38321;&#35712;&#20877;&#25509;&#33879;&#20170;&#22825;&#30340;&#36914;&#24230;&#21908;&#12290;</p><p>&#30456;&#20449;&#37096;&#20998;&#35712;&#32773;&#30475;&#21040; 13 &#38283;&#22987;&#36899;&#36617;&#36889;&#20491; SwiftUI &#23560;&#27396;&#65292;&#39318;&#20808;&#26371;&#24819;&#21040;&#30340;&#26159;&#12300;&#31967;&#31957;&#65292;&#21448;&#35201;&#23416;&#26032;&#26481;&#35199;&#20102;&#129327;&#12301;&#65292;&#20276;&#38568;&#33879;&#23416;&#19981;&#23436;&#12289;&#23416;&#19981;&#21205;&#30340;&#23416;&#32722;&#28966;&#24942;&#12290;</p><p>&#20854;&#23526;&#21834;&#65292;&#25105;&#22312;&#35215;&#21123;&#23560;&#27396;&#26178;&#65292;&#26368;&#20027;&#35201;&#30446;&#30340;&#26159;&#24819;&#24118;&#32102;&#35712;&#32773;&#36629;&#39686;&#35469;&#35672; SwiftUI &#30340;&#27231;&#26371;&#65292;&#35373;&#35336;&#20986;&#19968;&#26781;&#12300;&#28187;&#23569;&#20663;&#23475;&#12289;&#24375;&#21270;&#27138;&#36259;&#12301;&#30340;&#23416;&#32722;&#36335;&#32218;&#12290;&#30050;&#31455; SwiftUI &#36996;&#24456;&#24180;&#36629;&#65292;&#32085;&#22823;&#37096;&#20998;&#20844;&#21496;&#26082;&#26377;&#23560;&#26696;&#37117;&#36996;&#22312;&#29992; UIKit&#12290;&#29694;&#22312;&#38283;&#22987;&#65292;&#38568;&#33879;&#23560;&#27396;&#20358;&#25509;&#35320; SwiftUI &#21083;&#21083;&#22909;&#65292;&#19981;&#29992;&#24515;&#24613;&#12290;</p><p>&#21478;&#19968;&#26041;&#38754;&#65292;&#25105;&#35201;&#22810;&#35498;&#26126;&#12300;<strong>&#36889;&#26159;&#20491;&#27794;&#26377;&#20184;&#36027;&#29254;&#65292;&#20294;&#26159;&#29992;&#20184;&#36027;&#38651;&#23376;&#22577;&#24515;&#24907;&#22312;&#32147;&#29151;&#30340;&#23560;&#27396;</strong>&#12301;&#36889;&#21477;&#35441;&#30340;&#24847;&#24605;&#12290;</p><p>&#25105;&#20570;&#36942;&#35377;&#22810; iOS &#25216;&#34899;&#30340;&#20998;&#20139;&#65292;&#35377;&#22810;&#37117;&#28415;&#12300;&#29544;&#23478;&#12301;&#30340;&#12290;&#27604;&#22914; <a href="https://weakself.dev/">Podcast</a> &#33287;<a href="https://ethanhuang13.com/">&#38651;&#23376;&#22577;</a>&#20570;&#20102;&#36817;&#19977;&#24180;&#65292;&#24066;&#38754;&#19978;&#37117;&#27794;&#26377;&#20986;&#29694;&#39006;&#20284;&#30340;&#26481;&#35199;&#12290;</p><p>&#21516;&#27171;&#30340;&#26178;&#38291;&#31934;&#21147;&#65292;&#21487;&#20197;&#20570;&#33521;&#25991;&#20839;&#23481;&#20358;&#25509;&#35320;&#20840;&#29699;&#30340;&#38283;&#30332;&#32773;&#12289;&#23531; side project&#65292;&#29978;&#33267;&#25509;&#26696;&#36090;&#37666;&#20358;&#22686;&#21152;&#25910;&#20837;&#12290;&#35201;&#19981;&#28982;&#20063;&#21487;&#20197;&#22810;&#20241;&#24687;&#12289;&#29609;&#40670;&#36938;&#25138;&#31561;&#31561;&#12290;&#36984;&#25799;&#22312;&#20013;&#25991; iOS &#38283;&#30332;&#32773;&#22280;&#20998;&#20139;&#65292;&#36996;&#26159;&#22240;&#28858;&#24819;&#22238;&#39243;&#36889;&#20491;&#29031;&#39015;&#25105;&#35377;&#22810;&#30340;&#31038;&#32676;&#21543;&#12290;</p><p>&#36889;&#27425;&#26371;&#38283;&#38370; SwiftUI &#23560;&#27396;&#65292;&#26159;&#22240;&#28858;&#25105;&#25910;&#36942;&#35377;&#22810;&#35426;&#21839; SwiftUI &#22914;&#20309;&#20837;&#38272;&#30340;&#21839;&#38988;&#65292;&#20063;&#35264;&#23519;&#21040;&#19981;&#23569; iOS &#38283;&#30332;&#32773;&#19981;&#24471;&#20854;&#38272;&#32780;&#20837;&#12290;SwiftUI &#20854;&#23526;&#19981;&#38627;&#65292;&#21482;&#26159;&#23416;&#32722;&#36884;&#24465;&#26377;&#23427;&#29544;&#29305;&#20043;&#34389;&#12290;&#25105;&#23565; SwiftUI &#31639;&#26159;&#38935;&#26377;&#24515;&#24471;&#65292;&#23565;&#26044;&#12300;&#23416;&#32722; SwiftUI&#12301;&#36889;&#20214;&#20107;&#20063;&#26377;&#28145;&#20837;&#24605;&#32771;&#65292;&#30456;&#20449;&#35469;&#30495;&#23531;&#36215;&#20358;&#65292;&#19968;&#23450;&#33021;&#24171;&#21040;&#19968;&#20123;&#20154;&#12290;&#32780;&#19988;&#25105;&#23531;&#20986;&#20358;&#30340;&#26481;&#35199;&#12289;&#37610;&#38515;&#30340;&#26041;&#24335;&#65292;&#20320;&#22312;&#20854;&#20182;&#22320;&#26041;&#30475;&#19981;&#21040;&#12290;</p><p>&#29992;&#32147;&#28639;&#23416;&#20358;&#35498;&#65292;&#23601;&#26159;&#24066;&#22580;&#26377;&#38656;&#27714;&#12289;&#25105;&#21487;&#20197;&#20379;&#32102;&#128514;</p><p>&#20294;&#26159;&#65292;&#25226;&#36889;&#20123;&#30693;&#35672;&#25972;&#29702;&#25104;&#23560;&#27396;&#65292;&#30495;&#30340;&#26159;&#22312;&#25105;&#12300;&#20813;&#36027;&#25552;&#20379;&#12301;&#30340;&#33021;&#21147;&#31684;&#22285;&#37002;&#32227;&#20102;&#12290;&#22914;&#26524;&#36889;&#20491; SwiftUI &#23560;&#27396;&#65288;&#25110;&#26159;&#20219;&#20309;&#20154;&#20570;&#30340;&#20219;&#20309;&#19968;&#38917;&#23416;&#32722;&#36039;&#28304;&#65289;&#23565;&#20320;&#26377;&#24171;&#21161;&#65292;&#35531;&#22238;&#39243;&#25110;&#26159;&#20184;&#36027;&#32102;&#20316;&#32773;&#12290;</p><p>&#20320;&#21487;&#20197;<a href="https://www.patreon.com/ethanhuang13">&#35330;&#38321;&#25105;&#30340; Patreon</a> &#20358;&#25903;&#25345;&#25105;&#12290;&#25105;&#35373;&#23450;&#20102;&#27599;&#20491;&#26376; $5&#12289;$10&#12289;$15 &#32654;&#37329;&#19977;&#31278;&#65292;&#24076;&#26395;&#21487;&#20197;&#32047;&#31309;&#21040; 100 &#20301;&#25903;&#25345;&#32773;&#12290;&#30456;&#23565;&#22320;&#65292;&#20320;&#21487;&#20197;&#25552;&#21069;&#30475;&#21040;&#23560;&#27396;&#25991;&#31456;&#12290;&#27599;&#20491;&#26376;&#21021;&#65292;<a href="https://www.patreon.com/ethanhuang13">Patreon</a> &#26371;&#25187;&#27454;&#65292;&#20006;&#36865;&#21040;&#25105;&#30340; PayPal &#24115;&#25142;&#12290;&#36942;&#31243;&#20013;&#21435;&#38500;&#21508;&#31278;&#25163;&#32396;&#36027;&#24460;&#65292;&#22823;&#27010;&#21097;&#19979; 8 &#25104;&#26159;&#30495;&#27491;&#33021;&#36939;&#29992;&#30340;&#37329;&#38989;&#12290;&#36890;&#24120;&#25105;&#26159;&#25343;&#20358;&#36023;&#36023;&#36938;&#25138;&#65288;Steam&#12289;Xbox&#12289;Switch &#30342;&#21487;&#65292;&#20294;&#21488;&#28771; PSN &#19981;&#25903;&#25588;&#65289;&#12289;&#36575;&#39636;&#26381;&#21209;&#65288;&#20687;&#26159; GitHub Pro&#12289;Setapp&#65289;&#12289;&#32178;&#36335;&#26381;&#21209;&#12289;&#38651;&#23376;&#26360;&#12290;&#22914;&#26524;&#29351;&#29298;&#40670;&#21295;&#24046;&#30340;&#35441;&#65292;&#35330; Uber Eats &#36996;&#30495;&#30340;&#33021;&#22635;&#39165;&#32922;&#23376;<s>&#65292;&#38752;&#23531;&#20316;&#30070;&#39151;&#21507;</s>&#129315;&#65288;&#26356;&#26032;&#65306;Uber Eats &#22312;&#21488;&#28771;&#24050;&#19981;&#25903;&#25588; PayPal&#65289;</p><p>&#20316;&#28858;&#26089;&#26399;&#25903;&#25345;&#32773;&#65292;&#22914;&#26524;&#20320;&#26366;&#32147;&#25424;&#27454;&#36942; <a href="https://weakself.dev/">weak self</a> &#25110;&#26159;&#25105;&#20491;&#20154;&#65292;&#21363;&#20351;&#27794;&#26377;&#22312; <a href="https://www.patreon.com/ethanhuang13">Patreon</a> &#19978;&#35330;&#38321;&#65292;&#25105;&#20063;&#26371;&#25226;&#25991;&#31456;&#25552;&#21069;&#30332;&#32102;&#20320;&#30475;&#65288;&#20027;&#35201;&#26159;&#36879;&#36942; Discord &#23560;&#23660;&#38971;&#36947;&#65289;&#12290;&#22914;&#26524;&#20320;&#27794;&#25910;&#21040;&#30340;&#35441;&#65292;&#35531;&#35352;&#24471;&#20358;&#36319;&#25105;&#32034;&#21462;&#27402;&#38480;&#21908;&#12290;</p><p>&#22914;&#26524;&#35712;&#20102;&#36889;&#20221;&#23560;&#27396;&#26377;&#25152;&#25910;&#31339;&#65292;&#20294;&#36996;&#19981;&#24819;&#20184;&#36027;&#30340;&#35441;&#65292;&#25105;&#24076;&#26395;&#20320;&#21487;&#20197;&#25226;&#25152;&#23416;&#30693;&#35672;&#20998;&#20139;&#20986;&#20358;&#12290;&#23531; blog&#12289;&#30332;&#25512;&#29305;&#12289;&#32232;&#38651;&#23376;&#22577;&#65292;&#29978;&#33267;&#25293;&#24433;&#29255;&#65292;&#37117;&#24456;&#22909;&#12290;&#20013;&#25991; iOS &#31038;&#32676;&#38656;&#35201;&#26356;&#22810;&#25216;&#34899;&#20998;&#20139;&#12290;</p><p>&#21834;&#65292;&#19968;&#20491;&#19981;&#23567;&#24515;&#38283;&#38957;&#23601;&#23531;&#20102;&#36889;&#40636;&#22810;&#12290;&#35531;&#20139;&#21463;&#20170;&#22825;&#30340;&#20839;&#23481;&#65374;</p><p>&#65288;<a href="https://www.ethanhuang13.com/p/swiftui-0-get-a-m1">&#30475;&#21069;&#19968;&#26399;</a> &#183; <a href="https://www.ethanhuang13.com/p/swiftui-index">&#22238;&#23560;&#27396;</a> &#183; <a href="https://www.ethanhuang13.com/">&#22238;&#39318;&#38913;</a>&#65289;</p></blockquote><div><hr></div><h2><strong>&#21069;&#35328;</strong></h2><p>&#19978;&#19968;&#26399;&#35611;&#30340;&#26159; SwiftUI &#38283;&#30332;&#29872;&#22659;&#24517;&#35201;&#30340;&#30828;&#39636;&#35373;&#20633;&#12290;&#36889;&#19968;&#26399;&#65292;&#25105;&#20497;&#20358;&#35611;&#36575;&#39636;&#24037;&#20855;&#30340;&#37096;&#20998;&#12290;</p><p>&#35201;&#25776;&#23531; SwiftUI&#65292;&#25105;&#20497;&#24517;&#38920;&#20351;&#29992; Apple &#25552;&#20379;&#30340;&#38283;&#30332;&#36575;&#39636;&#8212;&#8212;Xcode&#12290;&#20809;&#26159;&#36984;&#25799;&#27491;&#30906;&#30340; Xcode &#29256;&#26412;&#65292;&#20197;&#21450;&#24590;&#40636;&#21462;&#24471; Xcode&#65292;&#23601;&#26159;&#19968;&#38272;&#23416;&#21839;&#20102;&#12290;&#25105;&#20063;&#26371;&#25945;&#20320;&#35373;&#23450;&#31243;&#24335;&#30908;&#33258;&#21205;&#25490;&#29256;&#24037;&#20855;&#12290;&#36889;&#20123;&#37117;&#26159;&#24555;&#27138;&#22320;&#29609;&#32781; SwiftUI &#38750;&#24120;&#37325;&#35201;&#30340;&#28310;&#20633;&#12290;</p><h2><strong>&#27794;&#20160;&#40636;&#36984;&#25799;&#65292;&#21482;&#33021;&#29992; Xcode</strong></h2><p>&#25105;&#20497;&#24375;&#35519;&#36942;&#65292;SwiftUI &#30340; <a href="https://developer.apple.com/documentation/swiftui/previews-in-xcode">Preview</a> &#26159;&#38283;&#30332;&#20013;&#19981;&#21487;&#25110;&#32570;&#30340;&#21151;&#33021;&#65292;&#32780;&#36889;&#38917;&#21151;&#33021;&#26159; Xcode &#30340;&#19968;&#37096;&#20998;&#65292;&#25152;&#20197;&#25105;&#20497;&#23601;&#21482;&#33021;&#29992; Xcode &#20102;&#12290;</p><p>&#20320;&#21487;&#33021;&#26371;&#21839;&#65292;iPad &#36319; Mac &#19978;&#37027;&#20491; <a href="https://apps.apple.com/tw/app/swift-playgrounds/id1496833156?mt=12">Swift Playgrounds</a> &#20570;&#28858;&#26367;&#20195;&#21697;&#34892;&#19981;&#34892;&#65311;&#25105;&#35258;&#24471;&#19981;&#34892;&#12290;</p><p>&#20006;&#19981;&#26159;&#35498; Swift Playgrounds &#19981;&#33021;&#25343;&#20358;&#38283;&#30332; app&#65292;<a href="https://twitter.com/tualatrix/status/1525311998052798464?s=21&amp;t=dbqG83ehsdidJdnttA8tQw">&#26377;&#20154;&#30906;&#23526;&#20570;&#21040;&#20102;</a>&#12290;&#20294;&#26159;&#22914;&#26524;&#35201;&#25226; SwiftUI &#23416;&#36215;&#20358;&#30340;&#35441;&#65292;Playgrounds &#26159;&#19981;&#22816;&#29992;&#30340;&#12290;</p><p>&#21908;&#23565;&#20102;&#65292;VSCode &#25645;&#37197; <a href="https://github.com/markst/hotreloading-vscode-ios">HotReloading</a> &#25110;&#35377;&#21487;&#20197;&#20570;&#20986;&#39006;&#20284; Preview &#30340;&#25928;&#26524;&#65292;&#20294;&#36889;&#26481;&#35199;&#22826;&#26032;&#65292;&#25105;&#36996;&#27794;&#26377;&#35430;&#36942;&#12290;&#26377;&#33288;&#36259;&#30340;&#26379;&#21451;&#21487;&#20197;&#29609;&#29609;&#30475;&#12290;</p><h2><strong>&#23433;&#35037; Xcode &#30340;&#37679;&#35492;&#33287;&#27491;&#30906;&#23039;&#21218;</strong></h2><p>&#21487;&#33021;&#26159;&#22240;&#28858;&#30475;&#36942;&#24456;&#22810;&#29992; Mac App Store &#19979;&#36617; Xcode &#23566;&#33268;&#20663;&#23475;&#30340;<a href="https://13h.tw/2019/11/01/manage-xcode-versions.html">&#26696;&#20363;</a>&#65292;&#25105;&#29305;&#21029;&#21916;&#27489;&#21240;&#38283;&#30332;&#32773;&#25913;&#29992;&#21029;&#30340;&#19979;&#36617;&#26041;&#24335;&#12290;&#28858;&#27492;&#23531;&#36942;<a href="https://weakself.dev/episodes/85">&#33267;</a>&#12289;<a href="https://www.notion.so/ethanhuang13/Xcode-dfbe2d934ff84b2d84e34ffceef56fe0">&#23569;</a>&#12289;<a href="https://13h.tw/2019/11/01/manage-xcode-versions.html">&#22235;</a>&#12289;<a href="https://13h.tw/2019/11/01/manage-xcode-versions.html">&#31687;</a>&#25991;&#31456;&#65292;&#26159;&#19981;&#26159;&#26377;&#35463;&#24373;&#21040;&#129315;</p><p>&#24478; Mac App Store &#19979;&#36617; Xcode&#65292;&#21807;&#19968;&#31281;&#24471;&#19978;&#22909;&#34389;&#30340;&#65292;&#26159;&#21482;&#38656;&#35201; App Store &#24115;&#34399;&#12290;&#20294;&#26159;&#25226; Apple ID <a href="https://developer.apple.com/account/">&#35387;&#20874;&#28858; Apple &#38283;&#30332;&#32773;&#24115;&#34399;</a>&#20006;&#19981;&#29992;&#20184;&#37666;&#65288;&#36319; <a href="https://developer.apple.com/programs/enroll/">Apple Developer Program</a> &#19981;&#19968;&#27171;&#65289;&#65292;&#32780;&#19988;&#38283;&#30332;&#32773;&#24115;&#34399;&#20197;&#24460;&#19968;&#23450;&#29992;&#24471;&#21040;&#65292;&#25152;&#20197;&#23601;&#19981;&#35201;&#20599;&#25078;&#20102;&#21543;&#12290;</p><p>&#26368;&#38525;&#26149;&#30340;&#19979;&#36617;&#26041;&#24335;&#65292;&#26159;&#21435;&#23448;&#32178;&#30331;&#20837;&#38283;&#30332;&#32773;&#24115;&#34399;&#20197;&#24460;&#65292;&#22312;&#36889;&#37002; <a href="https://developer.apple.com/download/all/">https://developer.apple.com/download/all/</a> &#25361;&#36984;&#29256;&#26412;&#12290;&#19979;&#36617; <code>.xip</code> &#27284;&#20197;&#24460;&#65292;&#33258;&#34892;&#35299;&#22739;&#32302;&#12290;</p><blockquote><p>&#22914;&#26524;&#20320;&#26377;&#22816;&#24555;&#30340;&#22806;&#25509;&#30828;&#30879;&#65292;&#20063;&#21487;&#20197;&#20998;&#20139; <code>.xip</code> &#27284;&#26696;&#32102;&#38656;&#35201;&#30340;&#21516;&#20107;&#65292;&#36889;&#26159;<a href="https://twitter.com/ethanhuang13/status/1316256554983714816?s=21&amp;t=OGWU_qd22SmVKiL0j5kbQw">&#26368;&#24555;&#21462;&#24471; Xcode &#30340;&#26041;&#24335;</a>&#129322;</p></blockquote><p>&#32780;&#30446;&#21069;&#26368;&#25512;&#34214;&#25152;&#26377;&#35469;&#30495;&#24819;&#35201;&#24478;&#20107; iOS &#38283;&#30332;&#30340;&#26379;&#21451;&#20351;&#29992; <a href="https://github.com/RobotsAndPencils/XcodesApp">Xcodes app</a> &#36889;&#20491; app &#20358;&#19979;&#36617;&#12290;&#21407;&#22240;&#26377;&#65306;</p><ul><li><p>&#23427;&#25505;&#29992; <a href="https://aria2.github.io/">aria2</a>&#65292;&#33021;&#22816;&#21516;&#26178;&#22810;&#36948; 16 &#20491;&#36899;&#32218;&#65292;&#19979;&#36617;&#36895;&#24230;&#26368;&#22823;&#21270;&#12290;&#22312;&#25105;&#23478;&#30340; 1000/600 &#20809;&#32406;&#65292;<a href="https://twitter.com/ethanhuang13/status/1503742029083389958">&#26368;&#39640;&#26366;&#32147;&#36305;&#21040; 112 MB/s</a></p></li><li><p>&#33021;&#22816;&#30475;&#21040;&#38651;&#33126;&#19978;&#25152;&#26377;&#30340; Xcode &#29256;&#26412;&#65292;&#20006;&#39023;&#31034;&#25152;&#26377;&#29256;&#26412;&#30340;&#30456;&#23481;&#24615;&#36039;&#35338;</p></li><li><p>&#19968;&#37749;&#20999;&#25563;&#30446;&#21069;&#24037;&#20855;&#37832;&#30340;&#29256;&#26412;&#65292;&#19981;&#29992;&#33258;&#24049;&#25171; <code>sudo xcode-select -s</code></p></li><li><p>&#26032;&#29256;&#36996;&#25903;&#25588; <a href="https://github.com/saagarjha/unxip">unxip</a> &#28204;&#35430;&#21151;&#33021;&#65292;&#35299;&#22739;&#32302;&#36895;&#24230;&#26368;&#24555;&#21487;&#36948; +70%</p></li></ul><blockquote><p>&#20320;&#21487;&#20197;&#22312; Xcodes &#30340; <a href="https://github.com/RobotsAndPencils/XcodesApp/releases">GitHub Releases</a> &#19979;&#36617;&#35442; app&#12290;</p></blockquote><p>Xcode &#27599;&#38548;&#24190;&#36913;&#23601;&#26371;&#26377;&#26032;&#29256;&#21487;&#20197;&#19979;&#36617;&#20358;<s>&#36393;&#22353;</s>&#28204;&#35430;&#65292;&#28310;&#20633;&#22909;&#24555;&#36895;&#30340;&#23433;&#35037;&#24037;&#20855;&#32085;&#19981;&#21507;&#34407;&#12290;&#19978;&#19968;&#26399;&#25512;&#22353; M1 &#21602;&#65292;&#20063;&#26159;&#22240;&#28858;&#23427;&#29992;&#20358;&#35299;&#22739;&#32302; <code>.xip</code> &#24456;&#24555;&#21602;&#128514;</p><h2><strong>&#35201;&#36984;&#21738;&#20491; Xcode &#29256;&#26412;&#21602;</strong></h2><p>SwiftUI &#26368;&#26089;&#26159;&#36319;&#33879; Xcode 11 &#19968;&#36215;&#25512;&#20986;&#30340;&#12290;&#23531;&#19979;&#36889;&#31687;&#25991;&#31456;&#30340;&#26178;&#20505;&#65292;&#26368;&#26032;&#29256;&#26159; Xcode 13.4.1&#65292;&#32780;&#25105;&#35469;&#28858; <strong>Xcode 13.2.1</strong> &#26159;&#26368;&#31337;&#23450;&#21448;&#19981;&#26371;&#22826;&#33290;&#30340;&#29256;&#26412;&#12290;</p><p>&#36039;&#28145; iOS &#24037;&#31243;&#24107;&#37117;&#26371;&#21435;&#35712; Release Notes &#20197;&#21450;&#19978;&#32178;&#30475;&#30475;&#26377;&#27794;&#26377;&#12300;&#28797;&#24773;&#12301;&#65292;&#20877;&#27770;&#23450;&#20351;&#29992;&#21738;&#20491;&#29256;&#26412;&#12290;</p><blockquote><p><a href="https://developer.apple.com/documentation/xcode-release-notes/xcode-13_3-release-notes">Xcode 13.3</a> &#20197;&#19978;&#26377;&#20491;&#22353;&#9472;&#9472;SPM Resolved &#27284;&#26684;&#24335;&#33287;&#20043;&#21069;&#30340;&#19981;&#21516;&#12290;&#22914;&#26524;&#29992; 13.3 &#20197;&#19978;&#26032;&#22686; Package &#20877;&#29992;&#33290;&#29256;&#38283;&#21855;&#65292;&#23601;&#26371;&#36935;&#21040;&#21839;&#38988;&#12290;&#23601;&#31337;&#23450;&#24615;&#20358;&#35498;&#25105;&#27604;&#36611;&#25512;&#34214;&#29992; 13.2.1 &#29256;</p></blockquote><p>&#22312; Xcode 14 &#27491;&#24335;&#29256;&#25512;&#20986;&#20043;&#21069;&#65292;&#19981;&#21453;&#23565;&#19979;&#36617; Xcode 14 beta &#29609;&#29609;&#26032;&#21151;&#33021;&#12290;&#20294;&#25105;&#35201;&#35731;&#20320;&#23416;&#21040;&#30340;&#26159;&#33021;&#29992;&#20358;&#19978;&#26550;&#30340;&#38283;&#30332;&#29872;&#22659;&#65292;&#25152;&#20197;&#21069;&#26399;&#25945;&#23416;&#20839;&#23481;&#26371;&#20197; Xcode 13.2.1 &#28858;&#28310;&#12290;</p><blockquote><p>&#19978;&#19968;&#26399;&#35611;&#28310;&#20633; Mac &#26178;&#65292;&#27794;&#26377;&#29305;&#21029;&#25552;&#21040;&#30828;&#30879;&#23481;&#37327;&#12290;&#20854;&#23526;&#19968;&#20491;&#35469;&#30495;&#30340; iOS &#24037;&#31243;&#24107;&#65292;&#38651;&#33126;&#35041;&#36890;&#24120;&#26371;&#26377;&#22909;&#24190;&#29256;&#30340; Xcode&#65292;&#25152;&#20197;&#21315;&#33836;&#19981;&#35201;&#21482;&#36984;&#37197; 256 GB SSD&#12290;512 GB &#26377;&#26178;&#20505;&#20063;&#26371;&#35258;&#24471;&#32202;&#36843;&#65292;1 TB &#21063;&#30456;&#30070;&#33298;&#26381;&#20102;&#12290;</p></blockquote><h2><strong>&#25490;&#29256;&#38750;&#24120;&#37325;&#35201;</strong></h2><p>SwiftUI &#22914;&#26524;&#23531;&#24471;&#22909;&#65292;&#26159;&#21487;&#20197;&#20570;&#21040;&#35731;&#20154;&#30475;&#19968;&#30524;&#65292;&#23601;&#22823;&#27010;&#30693;&#36947;&#30059;&#38754;&#30340;&#32080;&#27083;&#12290;&#20687;&#36889;&#27171;&#65306;</p><pre><code>var body: some View {
  VStack {
    HStack {
      leadingButton
      title
      trailingButton
    }
    .background(Color.secondary)

    content

    footer
      .font(.footnote)
  }
}</code></pre><p>&#20294;&#36889;&#26377;&#20491;&#37325;&#35201;&#21069;&#25552;&#65292;&#23601;&#26159;<strong>&#32302;&#25490;</strong>&#26159;&#27491;&#30906;&#30340;&#12290;&#19979;&#38754;&#26159;&#21516;&#27171;&#30340;&#31243;&#24335;&#30908;&#65292;&#20294;&#32302;&#25490;&#26159;&#20098;&#30340;&#65306;</p><pre><code>var body: some View {
VStack {
    HStack {
        leadingButton
        title
        trailingButton
    }
.background(Color.secondary)
content
footer
    .font(.footnote)
}
}</code></pre><p>&#20320;&#30475;&#24471;&#20986;&#20358; <code>VStack</code> &#35041;&#26377;&#24190;&#20491;&#20803;&#32032;&#12289;<code>.background()</code> &#26159;&#22871;&#22312;&#21738;&#19968;&#23652;&#21966;&#65311;</p><p>SwiftUI &#31243;&#24335;&#30908;&#35041;&#38754;&#26371;&#26377;&#22823;&#37327;&#30340; <code>{ }</code>&#65292;&#29992;&#20358;&#34920;&#31034;&#30059;&#38754;&#20803;&#32032;&#30340;&#38542;&#23652;&#38364;&#20418;&#12290;&#22914;&#26524;&#32302;&#25490;&#19981;&#27491;&#30906;&#30340;&#35441;&#65292;&#26681;&#26412;&#23601;&#27794;&#36774;&#27861;&#29702;&#35299;&#30059;&#38754;&#26159;&#38263;&#20160;&#40636;&#27171;&#23376;&#12290;</p><p>Xcode &#20839;&#24314;&#30340;&#37325;&#26032;&#32302;&#25490;&#21151;&#33021;&#65292;&#26159;&#25226;&#31243;&#24335;&#30908;&#36984;&#36215;&#20358;&#65292;&#28982;&#24460;&#25353;&#19979; <code>Ctrl+I</code>&#12290;</p><blockquote><p>&#20197;&#21069;&#19981;&#25026;&#20107;&#30340;&#26178;&#20505;&#65292;&#25105;&#37117;&#35258;&#24471;&#65292;&#21453;&#27491;&#23601; <code>Cmd+A</code> &#20840;&#36984;&#12289;&#20877; <code>Ctrl+I</code> &#12290;&#36996;&#34892;&#65292;&#36996;&#21487;&#20197;&#25509;&#21463;&#12290;</p></blockquote><p>&#20294;&#20854;&#23526;&#24456;&#22810; IDE &#33021;&#22312;&#25171;&#23383;&#25110;&#25563;&#34892;&#30340;&#21516;&#26178;&#65292;&#23601;&#26371;&#33258;&#21205;&#35519;&#25972;&#32302;&#25490;&#65288;&#27604;&#22914;<a href="https://docs.flutter.dev/development/tools/formatting">&#29992; VSCode &#25110; Android Studio &#38283;&#30332; Flutter</a>&#65289;&#65292;&#26681;&#26412;&#23601;&#19981;&#38656;&#35201;&#38283;&#30332;&#32773;&#22810;&#25353;&#37027;&#24190;&#19979;&#21834;&#12290;Swift Playgrounds &#20063;&#26377;&#39006;&#20284;&#30340;&#25928;&#26524;&#12290;&#24478;&#36889;&#20491;&#35282;&#24230;&#20358;&#30475;&#65292;Xcode &#26159;&#38750;&#24120;&#33853;&#24460;&#30340;&#12290;</p><blockquote><p>&#25105;&#20043;&#21069;&#23601;<a href="https://twitter.com/ethanhuang13/status/1509805851372326915?s=21&amp;t=DdMmoponIJQZatY_ppA6Ig">&#38928;&#35328; Xcode 14</a> &#26371;&#26377;&#26356;&#22909;&#30340; Swift &#26684;&#24335;&#24037;&#20855;&#25110;&#33258;&#21205;&#25490;&#29256;&#21151;&#33021;&#12290;&#26524;&#28982; Xcode 14 &#22312;&#20462;&#25913;&#31243;&#24335;&#30908;&#26178;&#65292;&#26356;&#23481;&#26131;&#35320;&#30332;&#33258;&#21205;&#35519;&#25972;&#32302;&#25490;&#65288;&#20363;&#22914;&#25171; <code>}</code> &#26178; &#65289;&#65292;&#36996;&#25512;&#20986;&#20102; Swift Package plugin &#27231;&#21046;&#65292;&#35731;&#38283;&#30332;&#32773;&#33258;&#24049;&#23433;&#35037;&#25110;&#38283;&#30332;&#21512;&#36969;&#30340;&#26684;&#24335;&#24037;&#20855;&#12290;</p></blockquote><p>&#19981;&#35542;&#22914;&#20309;&#65292;&#36996;&#22312;&#29992; Xcode 13 &#30340;&#25105;&#20497;&#65292;&#24517;&#38920;&#35201;&#26377;&#25033;&#23565;&#31574;&#30053;&#12290;&#32780;&#25105;&#35258;&#24471;&#26371;&#20196;&#35377;&#22810; iOS &#38283;&#30332;&#32773;&#30456;&#35211;&#24680;&#26202;&#30340;&#23601;&#26159;&#25505;&#29992; <a href="https://github.com/nicklockwood/SwiftFormat">SwiftFormat</a>&#12290;</p><h2><strong>SwiftFormat &#35037;&#36215;&#20358;</strong></h2><p>&#25105;&#22312; 2020 &#24180;&#23531;&#36942;<a href="https://www.notion.so/ethanhuang13/SwiftFormat-Xcode-8ff6da6724e840649ee59ca501041d74">&#19968;&#31687;&#31558;&#35352;&#20358;&#25512;&#22353; SwiftFormat</a>&#12290;&#23427;&#38500;&#20102;&#32302;&#25490;&#20197;&#22806;&#65292;&#36996;&#33021;&#20570;&#24456;&#22810;&#33258;&#21205;&#22871;&#29992; Swift &#31243;&#24335;&#30908;&#26684;&#24335;&#30340;&#20107;&#24773;&#12290;&#25105;&#25512;&#34214;&#32102;&#25152;&#26377;&#20351;&#29992; Xcode &#23531; Swift &#30340; iOS &#24037;&#31243;&#24107;&#65292;&#19981;&#35542;&#21021;&#23416;&#36996;&#26159;&#36039;&#28145;&#12290;&#19981;&#36942;&#22312;&#36889;&#20491;&#23560;&#27396;&#25105;&#21482;&#35498;&#26126;&#24517;&#35201;&#30340;&#27493;&#39519;&#12290;</p><p>&#39318;&#20808;&#65292;&#24478; SwiftFormat &#30340; <a href="https://github.com/nicklockwood/SwiftFormat/releases">GitHub Releases</a> &#19979;&#36617; SwiftFormat for Xcode app&#12290;</p><p>&#35299;&#22739;&#32302;&#20197;&#24460;&#65292;&#25302;&#26355;&#21040;&#25033;&#29992;&#31243;&#24335;&#36039;&#26009;&#22846;&#65292;&#25171;&#38283;&#12290;</p><p>&#23427;&#30340; icon &#26159;&#36889;&#20491;&#27171;&#23376;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!noVy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F69202b9d-6aca-49a6-926b-c307b394a3d6_568x374.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!noVy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F69202b9d-6aca-49a6-926b-c307b394a3d6_568x374.png 424w, https://substackcdn.com/image/fetch/$s_!noVy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F69202b9d-6aca-49a6-926b-c307b394a3d6_568x374.png 848w, https://substackcdn.com/image/fetch/$s_!noVy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F69202b9d-6aca-49a6-926b-c307b394a3d6_568x374.png 1272w, https://substackcdn.com/image/fetch/$s_!noVy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F69202b9d-6aca-49a6-926b-c307b394a3d6_568x374.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!noVy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F69202b9d-6aca-49a6-926b-c307b394a3d6_568x374.png" width="320" height="210.70422535211267" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/69202b9d-6aca-49a6-926b-c307b394a3d6_568x374.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:374,&quot;width&quot;:568,&quot;resizeWidth&quot;:320,&quot;bytes&quot;:41301,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!noVy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F69202b9d-6aca-49a6-926b-c307b394a3d6_568x374.png 424w, https://substackcdn.com/image/fetch/$s_!noVy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F69202b9d-6aca-49a6-926b-c307b394a3d6_568x374.png 848w, https://substackcdn.com/image/fetch/$s_!noVy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F69202b9d-6aca-49a6-926b-c307b394a3d6_568x374.png 1272w, https://substackcdn.com/image/fetch/$s_!noVy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F69202b9d-6aca-49a6-926b-c307b394a3d6_568x374.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">About SwiftFormat for Xcode</figcaption></figure></div><blockquote><p>&#20320;&#21487;&#20197;&#22312; app &#35041;&#35373;&#23450;&#21508;&#31278;<a href="https://github.com/nicklockwood/SwiftFormat/blob/master/Rules.md">&#35215;&#21063;</a>&#65292;&#23601;&#30041;&#32102;&#20320;&#33258;&#24049;&#30740;&#31350;&#65292;&#38928;&#35373;&#30340;&#35215;&#21063;&#20063;&#25402;&#22909;&#12290;</p></blockquote><p>&#22240;&#28858;&#23427;&#26159; Xcode &#30340;&#12300;&#24310;&#20280;&#21151;&#33021;&#12301;&#65292;&#24517;&#38920;&#21040;&#12300;&#31995;&#32113;&#20559;&#22909;&#35373;&#23450;&#12301;&#35041;&#21855;&#29992;&#23427;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ojZf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2baeda5-cf75-4893-bd6a-969da0dc2e6a_1336x1044.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ojZf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2baeda5-cf75-4893-bd6a-969da0dc2e6a_1336x1044.png 424w, https://substackcdn.com/image/fetch/$s_!ojZf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2baeda5-cf75-4893-bd6a-969da0dc2e6a_1336x1044.png 848w, https://substackcdn.com/image/fetch/$s_!ojZf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2baeda5-cf75-4893-bd6a-969da0dc2e6a_1336x1044.png 1272w, https://substackcdn.com/image/fetch/$s_!ojZf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2baeda5-cf75-4893-bd6a-969da0dc2e6a_1336x1044.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ojZf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2baeda5-cf75-4893-bd6a-969da0dc2e6a_1336x1044.png" width="728" height="568.8862275449102" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/e2baeda5-cf75-4893-bd6a-969da0dc2e6a_1336x1044.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:1044,&quot;width&quot;:1336,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:141298,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ojZf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2baeda5-cf75-4893-bd6a-969da0dc2e6a_1336x1044.png 424w, https://substackcdn.com/image/fetch/$s_!ojZf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2baeda5-cf75-4893-bd6a-969da0dc2e6a_1336x1044.png 848w, https://substackcdn.com/image/fetch/$s_!ojZf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2baeda5-cf75-4893-bd6a-969da0dc2e6a_1336x1044.png 1272w, https://substackcdn.com/image/fetch/$s_!ojZf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2baeda5-cf75-4893-bd6a-969da0dc2e6a_1336x1044.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">&#31995;&#32113;&#20559;&#22909;&#35373;&#23450; &gt; &#24310;&#20280;&#21151;&#33021; &gt; Xcode &#20358;&#28304;&#32232;&#36655;&#22120;</figcaption></figure></div><blockquote><p>&#22914;&#26524;&#20320;&#22312;&#12300;&#24310;&#20280;&#21151;&#33021;&#12301;&#25214;&#19981;&#21040; SwiftFormat&#65292;&#37027;&#40636;&#21487;&#33021;&#26159; Xcode &#21521; macOS &#35387;&#20874;&#20358;&#28304;&#32232;&#36655;&#22120;&#26041;&#38754;&#20986;&#20102;&#20160;&#40636;&#29376;&#27841;&#12290;</p><p>&#24050;&#30693;&#27604;&#36611;&#26377;&#25928;&#30340;&#12300;&#35299;&#27861;&#12301;&#65292;&#26159;&#21040;&#25033;&#29992;&#31243;&#24335;&#36039;&#26009;&#22846;<strong>&#25226; Xcode &#25913;&#20491;&#21517;&#23383;&#20877;&#25913;&#22238;&#20358;</strong>&#12290;</p><p>&#23565;&#65292;&#20320;&#27794;&#26377;&#30475;&#37679;&#8230;</p><p>&#22914;&#26524;&#20320;&#26159;&#29992; Xcodes &#19979;&#36617;&#30340;&#35441;&#65292;&#21517;&#31281;&#21487;&#33021;&#26371;&#26159;&#12300;Xcode-13.2.1.app&#12301;&#12290;&#23601;&#38568;&#20415;&#25913;&#25104;&#21029;&#30340;&#12289;&#20877;&#25913;&#22238;&#20358;&#12290;&#20877;&#22238;&#21040;&#12300;&#24310;&#20280;&#21151;&#33021;&#12301;&#30475;&#30475;&#26377;&#27794;&#26377;&#20986;&#29694; SwiftFormat&#12290;</p></blockquote><h2><strong>Xcode &#33287;&#23560;&#26696;&#35373;&#23450;</strong></h2><p>&#20170;&#22825;&#36889;&#31687;&#32080;&#26463;&#20043;&#21069;&#65292;&#19968;&#23450;&#35201;&#25945;&#22823;&#23478;&#24190;&#20491;&#35373;&#23450;&#65292;&#21487;&#20197;&#35498;&#26159;&#25105;&#23531; SwiftUI &#30340;&#23494;&#25216;&#12290;</p><h3>&#32129;&#23450; SwiftFormat</h3><p>&#21069;&#38754;&#35373;&#23450;&#23436; SwiftFormat for Xcode &#20197;&#24460;&#65292;&#25033;&#35442;&#26371;&#22312; Xcode &#30340; Editor &#36984;&#21934;&#26368;&#19979;&#38754;&#25214;&#21040; SwiftFormat&#12290;&#35041;&#38754;&#26377;&#19977;&#20491;&#21151;&#33021;&#65292;&#25105;&#20497;&#35201;&#24171; Format File &#35373;&#23450;&#24555;&#36895;&#37749;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wWtH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeeb152-ac58-4229-bde0-52c68fedb985_380x158.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wWtH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeeb152-ac58-4229-bde0-52c68fedb985_380x158.png 424w, https://substackcdn.com/image/fetch/$s_!wWtH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeeb152-ac58-4229-bde0-52c68fedb985_380x158.png 848w, https://substackcdn.com/image/fetch/$s_!wWtH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeeb152-ac58-4229-bde0-52c68fedb985_380x158.png 1272w, https://substackcdn.com/image/fetch/$s_!wWtH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeeb152-ac58-4229-bde0-52c68fedb985_380x158.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wWtH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeeb152-ac58-4229-bde0-52c68fedb985_380x158.png" width="174" height="72.34736842105264" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/faeeb152-ac58-4229-bde0-52c68fedb985_380x158.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:158,&quot;width&quot;:380,&quot;resizeWidth&quot;:174,&quot;bytes&quot;:15313,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wWtH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeeb152-ac58-4229-bde0-52c68fedb985_380x158.png 424w, https://substackcdn.com/image/fetch/$s_!wWtH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeeb152-ac58-4229-bde0-52c68fedb985_380x158.png 848w, https://substackcdn.com/image/fetch/$s_!wWtH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeeb152-ac58-4229-bde0-52c68fedb985_380x158.png 1272w, https://substackcdn.com/image/fetch/$s_!wWtH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeeb152-ac58-4229-bde0-52c68fedb985_380x158.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Xcode Menu &gt; Editor &gt; SwiftFormat</figcaption></figure></div><p>&#35531;&#21040; Xcode Preferences &#30340; Key Bindings&#65292;&#25628;&#23563; SwiftFormat&#65292;&#20006;&#25226; Format File &#25351;&#23450;&#28858; <code>Ctrl+Shift+I</code>&#12290;&#36889;&#32068;&#24555;&#36895;&#37749;&#33287;&#20839;&#24314;&#30340; <code>Ctrl+I</code> &#25509;&#36817;&#65292;&#21448;&#27794;&#26377;&#34909;&#31361;&#12290;&#65288;&#25226;&#20839;&#24314;&#30340;&#20445;&#30041;&#36215;&#20358;&#65292;&#20197;&#38450;&#33836;&#19968;&#20320;&#36996;&#26159;&#35201;&#29992;&#21040;&#12290;&#30050;&#31455; SwiftFormat &#19981;&#25903;&#25588; Objective-C&#65289;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Zun0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F23709416-2f13-41bb-a375-b9c6ceadcde2_1660x1118.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Zun0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F23709416-2f13-41bb-a375-b9c6ceadcde2_1660x1118.png 424w, https://substackcdn.com/image/fetch/$s_!Zun0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F23709416-2f13-41bb-a375-b9c6ceadcde2_1660x1118.png 848w, https://substackcdn.com/image/fetch/$s_!Zun0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F23709416-2f13-41bb-a375-b9c6ceadcde2_1660x1118.png 1272w, https://substackcdn.com/image/fetch/$s_!Zun0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F23709416-2f13-41bb-a375-b9c6ceadcde2_1660x1118.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Zun0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F23709416-2f13-41bb-a375-b9c6ceadcde2_1660x1118.png" width="728" height="490.5" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/23709416-2f13-41bb-a375-b9c6ceadcde2_1660x1118.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:981,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:141412,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Zun0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F23709416-2f13-41bb-a375-b9c6ceadcde2_1660x1118.png 424w, https://substackcdn.com/image/fetch/$s_!Zun0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F23709416-2f13-41bb-a375-b9c6ceadcde2_1660x1118.png 848w, https://substackcdn.com/image/fetch/$s_!Zun0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F23709416-2f13-41bb-a375-b9c6ceadcde2_1660x1118.png 1272w, https://substackcdn.com/image/fetch/$s_!Zun0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F23709416-2f13-41bb-a375-b9c6ceadcde2_1660x1118.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Xcode Preferences &gt; Key Bindings &gt; &#25628;&#23563; SwiftFormat &gt; Format File</figcaption></figure></div><p>&#36889;&#27171;&#23376;&#65292;&#22312;&#23531; SwiftUI &#26178;&#65292;&#30475;&#21040;&#30446;&#21069;&#27284;&#26696;&#30340;&#25490;&#29256;&#19981;&#38918;&#30524;&#65292;&#21482;&#35201;&#25353; <code>Ctrl+Shift+I &#23601;&#22909;&#12290;&#19981;&#38656;&#35201;&#20808;&#36984;&#21462;&#31243;&#24335;&#30908;&#21908;&#12290;</code></p><blockquote><p>SwiftFormat &#36996;&#26377;&#35377;&#22810;&#36914;&#38542;&#30340;&#21151;&#33021;&#33287;&#25972;&#21512;&#26041;&#24335;&#65292;&#23601;&#35531;&#21443;&#32771;&#25105;&#20043;&#21069;&#30340;<a href="https://www.notion.so/ethanhuang13/SwiftFormat-Xcode-8ff6da6724e840649ee59ca501041d74">&#25512;&#22353;&#31558;&#35352;</a>&#20102;&#12290;</p></blockquote><h3>&#20462;&#25913;&#32302;&#25490;&#23532;&#24230;</h3><p>Xcode &#23560;&#26696;&#38928;&#35373;&#30340;&#32302;&#25490;&#23532;&#24230;&#26159; 4 &#20491; Spaces&#12290;&#26681;&#25818;&#25105;&#23416;&#21040;&#30340;&#32147;&#39511;&#65292;&#25913;&#25104; 2 &#20491; Spaces &#23565;&#26044;&#30475; SwiftUI &#31243;&#24335;&#30908;&#24456;&#26377;&#24171;&#21161;&#12290;</p><p>&#36889;&#26159; Indent Width: 4 Spaces&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zWgN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F185a5a08-1e68-47f0-b084-bab138d2e3a8_1082x798.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zWgN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F185a5a08-1e68-47f0-b084-bab138d2e3a8_1082x798.png 424w, https://substackcdn.com/image/fetch/$s_!zWgN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F185a5a08-1e68-47f0-b084-bab138d2e3a8_1082x798.png 848w, https://substackcdn.com/image/fetch/$s_!zWgN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F185a5a08-1e68-47f0-b084-bab138d2e3a8_1082x798.png 1272w, https://substackcdn.com/image/fetch/$s_!zWgN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F185a5a08-1e68-47f0-b084-bab138d2e3a8_1082x798.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zWgN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F185a5a08-1e68-47f0-b084-bab138d2e3a8_1082x798.png" width="400" height="295.00924214417745" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/185a5a08-1e68-47f0-b084-bab138d2e3a8_1082x798.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:798,&quot;width&quot;:1082,&quot;resizeWidth&quot;:400,&quot;bytes&quot;:107868,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zWgN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F185a5a08-1e68-47f0-b084-bab138d2e3a8_1082x798.png 424w, https://substackcdn.com/image/fetch/$s_!zWgN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F185a5a08-1e68-47f0-b084-bab138d2e3a8_1082x798.png 848w, https://substackcdn.com/image/fetch/$s_!zWgN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F185a5a08-1e68-47f0-b084-bab138d2e3a8_1082x798.png 1272w, https://substackcdn.com/image/fetch/$s_!zWgN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F185a5a08-1e68-47f0-b084-bab138d2e3a8_1082x798.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#36889;&#26159; 2 Spaces&#12290;&#23565;&#26044;&#34722;&#24149;&#30340;&#23532;&#24230;&#35201;&#27714;&#36629;&#39686;&#35377;&#22810;&#12290;&#32780;&#19988;&#23565;&#25105;&#20358;&#35498;&#65292;&#36996;&#27604;&#36611;&#23481;&#26131;&#29992;&#30524;&#30555;&#35336;&#31639;&#32302;&#25490;&#30340;&#23652;&#32026;&#25976;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0ZrE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F335bfdf6-fa8e-433e-9f91-ea4bf26aeb9c_948x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0ZrE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F335bfdf6-fa8e-433e-9f91-ea4bf26aeb9c_948x800.png 424w, https://substackcdn.com/image/fetch/$s_!0ZrE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F335bfdf6-fa8e-433e-9f91-ea4bf26aeb9c_948x800.png 848w, https://substackcdn.com/image/fetch/$s_!0ZrE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F335bfdf6-fa8e-433e-9f91-ea4bf26aeb9c_948x800.png 1272w, https://substackcdn.com/image/fetch/$s_!0ZrE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F335bfdf6-fa8e-433e-9f91-ea4bf26aeb9c_948x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0ZrE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F335bfdf6-fa8e-433e-9f91-ea4bf26aeb9c_948x800.png" width="342" height="288.60759493670884" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/335bfdf6-fa8e-433e-9f91-ea4bf26aeb9c_948x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:948,&quot;resizeWidth&quot;:342,&quot;bytes&quot;:103320,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0ZrE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F335bfdf6-fa8e-433e-9f91-ea4bf26aeb9c_948x800.png 424w, https://substackcdn.com/image/fetch/$s_!0ZrE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F335bfdf6-fa8e-433e-9f91-ea4bf26aeb9c_948x800.png 848w, https://substackcdn.com/image/fetch/$s_!0ZrE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F335bfdf6-fa8e-433e-9f91-ea4bf26aeb9c_948x800.png 1272w, https://substackcdn.com/image/fetch/$s_!0ZrE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F335bfdf6-fa8e-433e-9f91-ea4bf26aeb9c_948x800.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#35531;&#21040; Xcode Preferences &#30340; Text Editing &#36914;&#34892;&#35373;&#23450;&#12290;&#25913;&#23436;&#20043;&#24460;&#22238;&#21040;&#31243;&#24335;&#30908;&#65292;&#25353;&#19979;&#21069;&#38754;&#25945;&#30340; <code>Ctrl+Shift+I</code>&#65292;<code>&#23601;&#26371;&#31435;&#21051;&#30475;&#21040;&#25928;&#26524;&#12290;</code></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RqJd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3398f8e1-8d0b-4c72-9921-d4b63dedc4e4_1660x1120.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RqJd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3398f8e1-8d0b-4c72-9921-d4b63dedc4e4_1660x1120.png 424w, https://substackcdn.com/image/fetch/$s_!RqJd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3398f8e1-8d0b-4c72-9921-d4b63dedc4e4_1660x1120.png 848w, https://substackcdn.com/image/fetch/$s_!RqJd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3398f8e1-8d0b-4c72-9921-d4b63dedc4e4_1660x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!RqJd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3398f8e1-8d0b-4c72-9921-d4b63dedc4e4_1660x1120.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RqJd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3398f8e1-8d0b-4c72-9921-d4b63dedc4e4_1660x1120.png" width="1456" height="982" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/3398f8e1-8d0b-4c72-9921-d4b63dedc4e4_1660x1120.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:982,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:184587,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!RqJd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3398f8e1-8d0b-4c72-9921-d4b63dedc4e4_1660x1120.png 424w, https://substackcdn.com/image/fetch/$s_!RqJd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3398f8e1-8d0b-4c72-9921-d4b63dedc4e4_1660x1120.png 848w, https://substackcdn.com/image/fetch/$s_!RqJd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3398f8e1-8d0b-4c72-9921-d4b63dedc4e4_1660x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!RqJd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3398f8e1-8d0b-4c72-9921-d4b63dedc4e4_1660x1120.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Xcode Preferences &gt; Text Editing &gt; Indentation &gt; Indent Width: 2 spaces</figcaption></figure></div><p>&#33267;&#26044;&#28784;&#33394;&#22291;&#40670;&#22043;&#65292;&#25105;&#20491;&#20154;&#26159;&#35258;&#24471;&#23565;&#26044;&#28187;&#36629;&#30524;&#21147;&#36000;&#25812;&#38935;&#26377;&#24171;&#21161;&#12290;&#35531;&#21040; Xcode &#36984;&#21934;&#30340; Editor&#65292;&#25226; Invisibles &#25171;&#38283;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RC_H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e6c298-6906-46cc-a250-a41f2de628b4_806x155.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RC_H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e6c298-6906-46cc-a250-a41f2de628b4_806x155.png 424w, https://substackcdn.com/image/fetch/$s_!RC_H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e6c298-6906-46cc-a250-a41f2de628b4_806x155.png 848w, https://substackcdn.com/image/fetch/$s_!RC_H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e6c298-6906-46cc-a250-a41f2de628b4_806x155.png 1272w, https://substackcdn.com/image/fetch/$s_!RC_H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e6c298-6906-46cc-a250-a41f2de628b4_806x155.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RC_H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e6c298-6906-46cc-a250-a41f2de628b4_806x155.png" width="346" height="66.53846153846153" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/e9e6c298-6906-46cc-a250-a41f2de628b4_806x155.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:155,&quot;width&quot;:806,&quot;resizeWidth&quot;:346,&quot;bytes&quot;:17372,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!RC_H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e6c298-6906-46cc-a250-a41f2de628b4_806x155.png 424w, https://substackcdn.com/image/fetch/$s_!RC_H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e6c298-6906-46cc-a250-a41f2de628b4_806x155.png 848w, https://substackcdn.com/image/fetch/$s_!RC_H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e6c298-6906-46cc-a250-a41f2de628b4_806x155.png 1272w, https://substackcdn.com/image/fetch/$s_!RC_H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e6c298-6906-46cc-a250-a41f2de628b4_806x155.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Xcode Menu &gt; Editor &gt; Invisibles</figcaption></figure></div><h2><strong>&#23567;&#32080;</strong></h2><p>SwiftUI &#23601;&#20687;&#26089;&#26399;&#30340; Swift&#65292;&#24118;&#32102;&#38283;&#30332;&#32773;&#35377;&#22810;&#20196;&#20154;&#33288;&#22894;&#30340;&#21151;&#33021;&#65292;&#20294;&#20063;&#24118;&#20358;&#19981;&#23569;&#30340;&#22256;&#25854;&#12290;&#24076;&#26395;&#36879;&#36942;&#26412;&#23560;&#27396;&#30059;&#20986;&#30340;&#36335;&#32218;&#22294;&#65292;&#35731;&#20320;&#26377;&#19968;&#20491;&#27604;&#36611;&#24555;&#27138;&#12289;&#19981;&#25387;&#25240;&#30340;&#23416;&#32722;&#32147;&#39511;&#12290;</p><p>&#36889;&#26399;&#25552;&#21040; Xcode&#12289;SwiftFormat &#30340;&#28310;&#20633;&#65292;&#35531;&#21029;&#23567;&#30475;&#30070;&#20013;&#30340;&#32048;&#31680;&#12290;&#24314;&#31435;&#22909;&#32722;&#24931;&#65292;&#25165;&#26371;&#35731;&#20043;&#24460; SwiftUI &#23531;&#36215;&#20358;&#26356;&#38918;&#21033;&#12290;</p><p>&#20043;&#24460;&#25105;&#26371;&#21578;&#35380;&#22823;&#23478;&#65292;&#26681;&#25818;&#22810;&#26041;&#22039;&#35430;&#30340;&#32147;&#39511;&#65292;&#20160;&#40636;&#27171;&#30340;&#12300;&#38988;&#30446;&#12301;&#36969;&#21512;&#29992; SwiftUI&#12290;&#22914;&#26524;&#20320;&#26377;&#32771;&#24942;&#29992; SwiftUI &#20570;&#30340;&#23560;&#26696;&#65292;&#27489;&#36814;&#23531;&#20449;&#25110;&#26159;&#20351;&#29992;&#30041;&#35328;&#128172;&#21151;&#33021;&#20358;&#33287;&#25105;&#35342;&#35542;&#12290;</p><p>&#21916;&#27489;&#36889;&#31687;&#25991;&#31456;&#30340;&#35712;&#32773;&#65292;<strong><a href="https://www.patreon.com/ethanhuang13">&#35531;&#21040; Patreon &#35330;&#38321;</a></strong>&#25903;&#25345;&#25105;&#128591;&#65288;&#24076;&#26395;&#21487;&#20197;&#32047;&#31309;&#21040; 100 &#20301;&#25903;&#25345;&#32773;&#65292;&#30446;&#21069; 11%&#65289;&#65292;&#20006;&#25353;&#19979;&#24859;&#24515;&#10084;&#65039;&#12289;&#30041;&#35328;&#128172;&#65292;&#20063;&#27489;&#36814;&#30452;&#25509;&#22238;&#20449;&#9993;&#65039;&#33287;&#25105;&#20132;&#27969;&#12290;&#36889;&#20123;&#22238;&#39243;&#37117;&#26371;&#30452;&#25509;&#24433;&#38911;&#21040;&#25105;&#32380;&#32396;&#23531;&#20316;&#30340;&#21205;&#21147;&#33287;&#38971;&#29575;&#21908;&#12290;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.patreon.com/ethanhuang13&quot;,&quot;text&quot;:&quot;&#35330;&#38321;&#25903;&#25345; 13&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.patreon.com/ethanhuang13"><span>&#35330;&#38321;&#25903;&#25345; 13</span></a></p>]]></content:encoded></item><item><title><![CDATA[SwiftUI 專欄 #0 首先，以 M1 為目標吧]]></title><description><![CDATA[SwiftUI &#35712;&#23436;&#23601;&#20837;&#22353; 2022/06/03]]></description><link>https://www.ethanhuang13.com/p/swiftui-0-get-a-m1</link><guid isPermaLink="false">https://www.ethanhuang13.com/p/swiftui-0-get-a-m1</guid><dc:creator><![CDATA[13]]></dc:creator><pubDate>Fri, 03 Jun 2022 10:00:47 GMT</pubDate><enclosure url="https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/fc9cf4b1-4f3b-44e6-b470-ac3bf2334183_564x404.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4><strong>13 &#30340;&#35441;</strong></h4><blockquote><p>13 &#30340; Apple &#38283;&#30332;&#32773;&#38651;&#23376;&#22577;&#27491;&#24335;&#38283;&#38370; <a href="https://www.ethanhuang13.com/s/swiftui">SwiftUI &#23560;&#27396;</a>&#21103;&#21002;&#65374;</p><p>&#36889;&#26159;&#19968;&#20491;<strong>&#27794;&#26377;&#20184;&#36027;&#29254;&#65292;&#20294;&#26159;&#29992;&#20184;&#36027;&#38651;&#23376;&#22577;&#24515;&#24907;&#22312;&#32147;&#29151;&#30340;&#23560;&#27396;</strong>&#12290;</p><p>&#35531;&#21040; <a href="https://www.patreon.com/ethanhuang13">Patreon</a> &#35330;&#38321;&#20358;&#25903;&#25345;&#25105;&#32380;&#32396;&#23531;&#20316;&#12290;&#35330;&#38321;&#32773;&#21487;&#20197;&#25654;&#20808;&#35712;&#21040;&#27599;&#19968;&#31687;&#26032;&#25991;&#31456;&#12290;</p><p>&#21103;&#27161;&#38988;&#12300;&#35712;&#23436;&#23601;&#20837;&#22353;&#12301;&#26159;&#22240;&#28858;&#25105;&#24819;&#29992;&#19968;&#31278;&#36629;&#39686;&#30340;&#27683;&#27675;&#24118;&#35712;&#32773;&#35469;&#35672; SwiftUI&#12290;</p><p>&#23601;&#31639;&#20320;&#19981;&#29087;&#24713; iOS &#38283;&#30332;&#20063;&#21487;&#20197;&#20139;&#21463;&#20854;&#20013;&#12290;&#23565;&#26044;&#36996;&#26410;&#20837;&#38272; SwiftUI &#30340; iOS &#32769;&#25163;&#20063;&#26371;&#24456;&#26377;&#24171;&#21161;&#12290;</p><p>&#19981;&#38656;&#35201;&#26377;&#36039;&#35338;&#28966;&#24942;&#65292;&#35712;&#19979;&#21435;&#23601;&#30693;&#36947;&#12290;</p><p>&#65288;<a href="https://www.ethanhuang13.com/p/swiftui-index">&#22238;&#23560;&#27396;</a> &#183; <a href="https://www.ethanhuang13.com/">&#22238;&#39318;&#38913;</a>&#65289;</p></blockquote><div><hr></div><h2><strong>&#28858;&#20309;&#20320;&#35201;&#35712; 13 &#23531;&#30340; SwiftUI &#23560;&#27396;</strong></h2><p><a href="https://developer.apple.com/xcode/swiftui/">SwiftUI</a> &#26159; Apple &#22312; 2019 &#24180; WWDC &#38568;&#33879; iOS 13 &#19968;&#36215;&#30332;&#34920;&#30340;&#20840;&#26032; UI &#26694;&#26550;&#12290;&#31777;&#21934;&#20358;&#35498;&#23601;&#26159;&#24819;&#36879;&#36942;&#26032;&#30340;&#23531;&#27861;&#65292;&#35731;&#20154;&#21487;&#20197;&#21516;&#26178;&#38283;&#30332; iOS&#12289;Mac&#12289;Apple Watch&#12289;Apple TV &#30340; app&#12290;</p><p>&#20877;&#36942;&#24190;&#22825;&#23601;&#26159; <a href="https://developer.apple.com/wwdc22/">WWDC22</a>&#65292;Apple &#32943;&#23450;&#26371;&#30332;&#20296;&#22823;&#37327; SwiftUI &#30340;&#26032;&#21151;&#33021;&#12290;&#20316;&#28858;&#31532;&#22235;&#29256;&#30340; UI &#26694;&#26550;&#65292;SwiftUI &#25033;&#35442;&#26377;&#19968;&#23450;&#30340;&#25104;&#29087;&#24230;&#20102;&#8230;&#21543;&#65311;</p><p>&#38364;&#26044;&#36889;&#40670;&#27794;&#20154;&#35498;&#24471;&#28310;&#12290;&#21482;&#33021;&#35498;&#65292;SwiftUI &#24478; iOS 13 &#20197;&#20358;&#29986;&#29983;&#20102;<a href="https://mjtsai.com/blog/2022/05/24/swiftui-in-2022/">&#22823;&#37327;&#30340;&#20663;&#23475;</a>&#12290;&#35377;&#22810; iOS &#38283;&#30332;&#32773;&#37117;&#35258;&#24471; SwiftUI &#36996;&#19981;&#25104;&#29087;&#12290;</p><p>&#20294;&#36889;&#19981;&#22952;&#31001;&#25105;&#24819;&#23531; SwiftUI &#23560;&#27396;&#21834;&#12290;&#19968;&#26041;&#38754;&#26159;<a href="https://twitter.com/ethanhuang13/status/1528780571639709696?s=21&amp;t=qGsSCieJ0uXjMfjINeZqjQ">&#24456;&#22810;&#20154;&#26377;&#33288;&#36259;</a>&#12290;&#21478;&#19968;&#26041;&#38754;&#65292;&#25105;&#36393;&#30340;&#22353;&#31639;&#26159;&#22816;&#22810;&#20102;&#65292;&#35258;&#24471;&#22823;&#37096;&#20998;&#21839;&#38988;&#26159;&#22240;&#28858;&#19981;&#20102;&#35299;&#22522;&#26412;&#35264;&#24565;&#65292;&#25110;&#26159;&#34987;&#33290;&#30340;&#24515;&#26234;&#27169;&#22411;&#65288;UIKit&#65289;&#32102;&#26463;&#32283;&#20102;&#12290;&#19968;&#26086;&#36328;&#36942;&#24190;&#20491;&#26126;&#39023;&#30340;&#38556;&#31001;&#20197;&#24460;&#65292;SwiftUI &#30495;&#30340;&#26159;&#28415;&#22909;&#29609;&#30340;&#12290;&#33267;&#23569;&#25105;&#26159;&#22238;&#19981;&#21435;&#29992; UIKit &#20102;&#12290;</p><p>&#25105;&#26377;&#25226;&#25569;&#24118;&#20320;&#36328;&#36942;&#37027;&#20123;&#26126;&#39023;&#30340;&#38556;&#31001;&#65292;&#32780;&#19988;&#20839;&#23481;&#25110;&#26041;&#21521;&#65292;&#20854;&#20182; SwiftUI &#20837;&#38272;&#25945;&#26448;&#26159;&#30475;&#19981;&#21040;&#30340;&#12290;&#24590;&#40636;&#27171;&#65292;&#26377;&#33288;&#36259;&#20102;&#21966;&#65311;</p><p>&#35731;&#25105;&#20497;&#38283;&#22987;&#21543;&#12290;</p><h2><strong>&#24819;&#19981;&#21040;&#65292;&#36889;&#26159;&#19968;&#20491;&#21240;&#25943;&#23560;&#27396;</strong></h2><p>&#39318;&#20808;&#65292;&#35201;&#29992;&#22909;&#65288;&#25110;&#26159;&#29609;&#22909;&#12289;&#23416;&#22909;&#65289;SwiftUI&#65292;&#20320;&#38656;&#35201;&#19968;&#21488; M1 &#31561;&#32026;&#30340; Mac&#12290;</p><p>13 &#20320;&#19981;&#26159;&#22312;&#35498;&#31505;&#30340;&#21543;&#65292;&#12300;&#27442;&#32244; SwiftUI&#65292;&#20808;&#36023; M1&#12301;&#65311;</p><p>&#36947;&#29702;&#24456;&#31777;&#21934;&#65292;&#20320;&#38656;&#35201;&#22816;&#24555;&#30340;&#38651;&#33126;&#12290;&#20294;&#35531;&#20808;&#32893;&#25105;&#35611;&#20491;&#32972;&#26223;&#12290;</p><p>Apple &#25512;&#20986; Apple Silicon &#30340; Mac &#26178;&#65292;&#25105;&#26159;&#26368;&#26089;&#19968;&#25209;&#39636;&#39511;&#30340;&#38283;&#30332;&#32773;&#12290;&#30003;&#36092;&#20102; A12Z &#34389;&#29702;&#22120;&#30340; <a href="https://zh.wikipedia.org/zh-tw/Developer_Transition_Kit">DTK</a>&#65292;&#39514;&#28858;&#22825;&#20154;&#12290;M1 &#27491;&#24335;&#19978;&#24066;&#20197;&#24460;&#65292;&#36023;&#20102; MacBook Air M1 &#32102;&#23478;&#20154;&#65292;DTK &#27512;&#36996; Apple &#20197;&#24460;&#21152;&#20729;&#36023;&#20102;&#19968;&#21488; Mac mini M1&#12290;&#20844;&#21496;&#30332;&#32102;&#25105; MacBook Pro 13 &#21515; M1 &#33287; iPad Pro M1&#12290;</p><p>&#26159;&#30340;&#65292;&#25105;&#23478;&#35041;&#26377; 4 &#21488; M1&#12290;</p><p>&#36889;&#20854;&#20013;&#65292;&#26368;&#20102;&#19981;&#36215;&#30340;&#26159; <a href="https://www.apple.com/tw/macbook-air/">MacBook Air</a> M1&#12290;&#26368;&#20415;&#23452;&#30340; Apple &#31558;&#38651;&#65292;&#20294;&#26159;&#25928;&#33021;&#12289;&#32396;&#33322;&#21147;&#12289;&#30332;&#29105;&#25511;&#21046;&#65292;&#37117;&#36229;&#36942;&#30070;&#26178;&#20844;&#21496;&#37197;&#32102;&#25105;&#30340; MacBook Pro 16 &#21515; Intel Core i9&#12290;&#21806;&#20729;&#21482;&#26377;&#19968;&#21322;&#19981;&#21040;&#12290;</p><p>M1 &#26159; Mac &#38651;&#33126; CP &#20540;&#22823;&#29190;&#30332;&#30340;&#19968;&#20195;&#12290;</p><h2><strong>&#36861;&#27714;&#33021;&#22816;&#25226; Preview &#36305;&#22909;&#30340; CPU &#25928;&#33021;</strong></h2><p>&#35201;&#29992;&#22909; SwiftUI&#65292;&#26368;&#37325;&#35201;&#30340;&#26159;&#65292;&#23531;&#31243;&#24335;&#30340;&#26178;&#20505;&#35201;&#33021;&#22816;&#30452;&#25509;&#30475;&#21040;&#30059;&#38754;&#12290;&#21407;&#22240;&#25105;&#24460;&#38754;&#20877;&#35611;&#12290;&#36889;&#20491;&#21151;&#33021;&#21483;&#20570; <a href="https://developer.apple.com/documentation/swiftui/previews-in-xcode">SwiftUI Preview</a>&#65292;&#25110;&#26159; Xcode Preview&#12290;</p><p>Preview &#35201;&#36939;&#20316;&#27491;&#24120;&#65292;&#20320;&#38656;&#35201;&#19968;&#21488;&#22816;&#24555;&#30340;&#38651;&#33126;&#65292;&#32780; M1 &#23601;&#26159;&#25105;&#20351;&#29992;&#22810;&#21488; Mac &#20043;&#24460;&#30906;&#35469;&#30340;&#26368;&#20302;&#27161;&#28310;&#12290;</p><p>&#30070;&#28982;&#20320;&#35201;&#36023; M1 Pro&#12289;M1 Max &#29978;&#33267; M1 Ultra &#25105;&#20063;&#19981;&#26371;&#21453;&#23565;&#12290;&#20294;&#26159;&#23601; CPU &#36939;&#31639;&#33021;&#21147;&#20358;&#35498;&#65292;M1 &#26159;&#24456;&#22816;&#29992;&#30340;&#12290;</p><h2><strong>&#25509;&#19979;&#20358;&#65292;16 GB &#24456;&#26377;&#29992;</strong></h2><p>&#25105;&#30070;&#26178;&#36023;&#37027;&#21488; MacBook Air &#26159;&#25171;&#31639;&#32102;&#23478;&#20154;&#25991;&#26360;&#20351;&#29992;&#65292;&#25152;&#20197;&#25925;&#24847;&#36984;&#20102; 8 GB&#65292;&#24819;&#38918;&#20415;&#20102;&#35299;&#19968;&#19979; <a href="https://developer.apple.com/videos/play/wwdc2020/10686/">Apple Silicon &#26377; UMA(Unified Memory Architecture)</a> &#33021;&#21542;&#29992;&#27604;&#36611;&#23569;&#30340;&#35352;&#25014;&#39636;&#20173;&#20445;&#26377;&#19981;&#37679;&#30340;&#25928;&#33021;&#12290;</p><p>&#32080;&#26524;&#30332;&#29694;&#65292;&#22914;&#26524;&#19981;&#36305; Xcode Preview&#65292;&#32780;&#26159;&#25226;&#31243;&#24335;&#36305;&#21040;&#25163;&#27231;&#19978;&#65292;&#37027;&#22519;&#34892;&#36895;&#24230;&#30906;&#23526;&#26371;&#27604; Intel Core i9 &#20358;&#24471;&#24555;&#12290;</p><p>&#20294;&#26159;&#22914;&#26524;&#38283;&#20102;&#27169;&#25836;&#22120;&#65288;Simulator&#65289;&#25110;&#26159; Preview&#65292;&#35352;&#25014;&#39636;&#23601;&#26371;&#20197;&#27599;&#20491;&#27169;&#25836;&#22120; 2 GB &#28858;&#21934;&#20301;&#34987;&#21507;&#25481;&#65288;Preview &#20063;&#26159;&#27169;&#25836;&#22120;&#30340;&#19968;&#31278;&#65289;&#65292;&#19968;&#19979;&#23376;&#23601;&#19981;&#22816;&#29992;&#20102;&#12290;</p><p>&#31777;&#32780;&#35328;&#20043;&#65292;<strong>&#28310;&#20633;&#19968;&#21488; M1&#65292;&#36984;&#37197;&#21040; 16 GB &#35352;&#25014;&#39636;</strong>&#12290;</p><h2><strong>&#28858;&#20160;&#40636;&#35201;&#39015;&#22909; Preview&#65311;</strong></h2><p>&#25105;&#25033;&#35442;&#36996;&#27794;&#26377;&#25104;&#21151;&#35498;&#26381;&#20320;&#28858;&#20102; SwiftUI &#25226; M1 &#36023;&#19979;&#21435;&#12290;&#29694;&#22312;&#20358;&#35498;&#28858;&#20160;&#40636;&#35201;&#39015;&#22909; Preview&#12290;</p><p>SwiftUI &#30340;&#22522;&#26412;&#27010;&#24565;&#26159;&#65292;<strong>&#20320;&#23531;&#19979;&#30340;&#31243;&#24335;&#30908;&#65292;&#26159;&#22312;&#25551;&#36848;&#36039;&#26009;&#33287;&#30059;&#38754;&#20043;&#38291;&#30340;&#38364;&#20418;&#12290;&#20043;&#24460;&#21482;&#35201;&#20462;&#25913;&#36039;&#26009;&#30340;&#29376;&#24907;&#65292;&#30059;&#38754;&#23601;&#25033;&#35442;&#26371;&#36319;&#33879;&#25913;&#35722;&#12290;</strong>&#65288;&#36889;&#21477;&#35441;&#29694;&#22312;&#19981;&#29702;&#35299;&#25110;&#35352;&#19981;&#36215;&#20358;&#27794;&#38364;&#20418;&#12290;&#25105;&#20043;&#24460;&#26371;&#37325;&#35079;&#35611;&#21040;&#28889;&#21360;&#22312;&#20320;&#30340;&#33126;&#28023;&#35041;&#129322;&#65289;</p><p>&#32780; Preview &#23601;&#26159;&#19968;&#20491;&#24171;&#21161;&#20320;&#25226;&#21508;&#31278;&#36039;&#26009;&#30340;&#21487;&#33021;&#23637;&#29694;&#20986;&#20358;&#12289;&#30452;&#25509;&#30475;&#21040;&#30059;&#38754;&#38263;&#30456;&#30340;&#27231;&#21046;&#12290;</p><p>&#20320;&#30693;&#36947;&#21966;&#65292;&#20197;&#21069;&#24456;&#22810; iOS &#38283;&#30332;&#32773;&#21916;&#27489;&#21557;&#35498;&#35201;&#29992;&#31243;&#24335;&#30908;&#12300;&#21051;&#12301;&#20986;&#20358;&#65292;&#36996;&#26159;&#35201;&#29992; Storyboard &#12300;&#25289;&#12301;&#20986;&#20358;&#12290;</p><p>&#21069;&#32773;&#26159;&#25226;&#24314;&#31435;&#30059;&#38754;&#30340;&#21508;&#20491;&#20803;&#20214;&#20006;&#32068;&#21512;&#30340;&#27493;&#39519;&#23531;&#20986;&#20358;&#12290;&#24460;&#32773;&#21063;&#26159;&#29992; Xcode &#35041;&#30340;&#25152;&#35211;&#21363;&#25152;&#24471;&#24037;&#20855;&#9472;&#9472;Interface Builder &#20358;&#25490;&#29256;&#12290;</p><p>&#20294;&#26159;&#36889;&#20841;&#31278;&#26041;&#24335;&#25105;&#37117;&#19981;&#21916;&#27489;&#12290;&#19981;&#31649;&#26159;&#29992;&#12300;&#21051;&#12301;&#30340;&#36996;&#26159;&#12300;&#25289;&#12301;&#30340;&#65292;&#37117;&#35201;&#21040;&#22519;&#34892;&#38542;&#27573;&#25165;&#33021;&#30475;&#21040;&#32080;&#26524;&#12290;&#22312;&#32232;&#35695;&#38542;&#27573;&#26178;&#65292;&#28961;&#27861;&#30906;&#23450;&#30059;&#38754;&#26159;&#27491;&#30906;&#12290;&#25563;&#35328;&#20043;&#65292;&#38283;&#30332;&#32773;&#24517;&#38920;&#35201;&#25226;&#31243;&#24335;&#36305;&#21040;&#27169;&#25836;&#22120;&#25110;&#23526;&#27231;&#65292;&#25165;&#26371;&#30475;&#21040;&#30495;&#23526;&#30340;&#27171;&#35980;&#12290;</p><p>&#31561;&#24453;&#12300;&#36305;&#36215;&#20358;&#12301;&#26159;&#38750;&#24120;&#28010;&#36027;&#29983;&#21629;&#30340;&#20107;&#24773;&#12290;&#20294;&#25105;&#20497;&#36942;&#21435;&#37117;&#26159;&#36889;&#27171;&#20570;&#65292;&#27599;&#20491;&#24490;&#29872;&#24478;&#24190;&#21313;&#31186;&#21040;&#24190;&#20998;&#37912;&#19981;&#31561;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yofe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4beab48c-5634-4cf6-a4e9-6c213b2581d4_413x360.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yofe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4beab48c-5634-4cf6-a4e9-6c213b2581d4_413x360.png 424w, https://substackcdn.com/image/fetch/$s_!yofe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4beab48c-5634-4cf6-a4e9-6c213b2581d4_413x360.png 848w, https://substackcdn.com/image/fetch/$s_!yofe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4beab48c-5634-4cf6-a4e9-6c213b2581d4_413x360.png 1272w, https://substackcdn.com/image/fetch/$s_!yofe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4beab48c-5634-4cf6-a4e9-6c213b2581d4_413x360.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yofe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4beab48c-5634-4cf6-a4e9-6c213b2581d4_413x360.png" width="413" height="360" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4beab48c-5634-4cf6-a4e9-6c213b2581d4_413x360.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:360,&quot;width&quot;:413,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yofe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4beab48c-5634-4cf6-a4e9-6c213b2581d4_413x360.png 424w, https://substackcdn.com/image/fetch/$s_!yofe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4beab48c-5634-4cf6-a4e9-6c213b2581d4_413x360.png 848w, https://substackcdn.com/image/fetch/$s_!yofe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4beab48c-5634-4cf6-a4e9-6c213b2581d4_413x360.png 1272w, https://substackcdn.com/image/fetch/$s_!yofe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4beab48c-5634-4cf6-a4e9-6c213b2581d4_413x360.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p><a href="https://xkcd.com/303/">xkcd &#36889;&#24373;&#22294;</a>&#27511;&#20037;&#19981;&#34928;&#21738;&#12290;</p></blockquote><p>&#31561;&#24453;&#26178;&#38291;&#24456;&#38263;&#65292;&#38291;&#25509;&#22320;&#36896;&#23601;&#20102;&#35377;&#22810;&#20778;&#36074;&#30340; iOS &#38283;&#30332;&#32773;&#25512;&#29305;&#24115;&#34399;&#12290;&#22240;&#28858;&#20182;&#20497;&#31561;&#24453;&#26399;&#38291;&#19981;&#30693;&#36947;&#35201;&#24185;&#22043;&#23601;&#19978;&#25512;&#29305;&#30475;&#30475;&#26032;&#30693;&#12290;&#65288;&#35611;&#21040;&#36889;&#35041;&#65292;&#20063;&#27489;&#36814;&#36861;&#36452;<a href="https://twitter.com/ethanhuang13">&#25105;&#30340;&#25512;&#29305;&#24115;&#34399;</a>&#12290;&#37027;&#26159;&#19968;&#20491;&#24456;&#32020;&#30340;&#22312;&#35342;&#35542; Apple/iOS &#25216;&#34899;&#30340;&#24115;&#34399;&#12290;&#65289;</p><p>SwiftUI &#30340;&#20986;&#29694;&#65292;&#30636;&#38291;&#25171;&#30772;&#20102;&#36889;&#20491;&#29694;&#35937;&#65311;&#22909;&#21543;&#38614;&#28982;&#25105;&#24456;&#24819;&#36889;&#40636;&#35498;&#65292;&#20294;&#33267;&#23569;&#22312; iOS 13 &#26178;&#31532;&#19968;&#29256;&#30340; SwiftUI &#20006;&#27794;&#26377;&#12290;&#30070;&#26178; Xcode 11 &#30340; Preview &#24930;&#24471;&#35201;&#21629;&#65292;&#21448;&#24120;&#24120;&#30070;&#27231;&#12290;&#21240;&#36864;&#20102;&#19981;&#23569;&#24819;&#22039;&#39854; SwiftUI &#30340;&#38283;&#30332;&#32773;&#12290;</p><h2><strong>&#29694;&#22312;&#30340; Preview &#24050;&#32147;&#22816;&#29992;</strong></h2><p>&#20294;&#26159;&#29694;&#22312;&#24050;&#32147;&#26159; Xcode 13&#12289;iOS 15&#12290;SwiftUI &#31532;&#19977;&#29256;&#31337;&#23450;&#35377;&#22810;&#65292;Preview &#22312;&#22823;&#22810;&#25976;&#24773;&#27841;&#37117;&#27491;&#24120;&#20102;&#12290;&#38614;&#28982;&#20598;&#29246;&#35201;&#22810;&#25353;&#24190;&#27425;&#25165;&#26371;&#36305;&#23436;&#65292;&#20294;&#24050;&#32147;&#26159;&#30906;&#23526;&#26377;&#29983;&#29986;&#25928;&#29575;&#30340;&#24037;&#20855;&#20102;&#12290;</p><p>Preview &#30340;&#21407;&#29702;&#26159;&#23567;&#27169;&#25836;&#22120;&#65292;&#25226;&#22519;&#34892;&#20986;&#20358;&#30340;&#30059;&#38754;&#25850;&#22312;&#31243;&#24335;&#30908;&#26049;&#37002;&#12290;&#25152;&#20197;&#23427;&#20381;&#28982;&#26159;&#25105;&#19978;&#38754;&#35498;&#30340;&#12300;&#25226;&#31243;&#24335;&#36305;&#36215;&#20358;&#25165;&#30475;&#24471;&#21040;&#30495;&#23526;&#30340;&#27171;&#35980;&#12301;&#12290;&#20294;&#26159;&#22240;&#28858;&#36305;&#30340;&#31243;&#24335;&#20677;&#38480;&#26044;&#23567;&#31684;&#22285;&#65292;&#25152;&#20197;&#25913;&#21205;&#31243;&#24335;&#30908;&#20043;&#24460;&#65292;&#21487;&#20197;&#22312;&#24190;&#31186;&#29978;&#33267;&#19968;&#31186;&#20839;&#30475;&#21040;&#25490;&#29256;&#26356;&#26032;&#30340;&#32080;&#26524;&#12290;</p><p>&#27599;&#20491;&#24490;&#29872;&#24478;&#24190;&#21313;&#31186;&#65374;&#24190;&#20998;&#37912;&#65292;&#32302;&#30701;&#21040;&#24190;&#31186;&#37912;&#65292;&#25105;&#25954;&#35498;&#29992; SwiftUI &#38283;&#30332; UI &#30340;&#25928;&#29575;&#27604; UIKit &#24555;&#19978; 10 &#20493;&#12290;</p><p>&#36393;&#36942; SwiftUI &#22353;&#30340;&#26379;&#21451;&#32943;&#23450;&#19981;&#21516;&#24847;&#25105;&#20491;&#35498;&#27861;&#12290;&#12300;&#38283;&#30332; 10 &#20493;&#24555;&#20294;&#26159;&#36935;&#21040; SwiftUI &#30340; bug &#35299;&#27770;&#19981;&#20102;&#65292;&#33457;&#19978; 100 &#20493; &#30340;&#26178;&#38291;&#34389;&#29702;&#65292;&#37027;&#20063;&#27794;&#26377;&#27604;&#36611;&#22909;&#21834;&#12290;&#12301;</p><p>&#27794;&#37679;&#12290;&#25152;&#20197;&#20043;&#24460;&#25105;&#26371;&#32842;&#21040;&#24456;&#22810; SwiftUI &#30340;&#22353;&#65292;&#35731;&#20320;&#23565;&#23427;&#26377;&#20491;&#27491;&#30906;&#30340;&#26399;&#24453;&#12290;&#24076;&#26395;&#36889;&#27171;&#21487;&#20197;&#24171;&#21161;&#20320;&#22312;&#19981;&#21516;&#38656;&#27714;&#19979;&#65292;&#36984;&#25799;&#21512;&#36969;&#30340;&#24037;&#20855;&#20358;&#38283;&#30332;&#12290;</p><blockquote><p>&#20320;&#20063;&#21487;&#20197;&#29992; Preview &#20358;&#30475;&#21040; UIKit &#30340;&#27171;&#35980;&#12290;&#22240;&#28858; SwiftUI &#25552;&#20379;&#21253;&#35037; <code>UIView</code> &#30340;&#21151;&#33021;&#12290;&#19981;&#36942;&#36889;&#26041;&#38754;&#25105;&#23601;&#19981;&#25171;&#31639;&#35342;&#35542;&#20102;&#12290;</p></blockquote><h2>&#25105;&#38656;&#35201;&#28310;&#20633;&#19968;&#21488; iPhone &#21966;&#65311;</h2><p>&#32771;&#24942;&#21040;&#26377;&#20123;&#35712;&#32773;&#26159;&#23565; SwiftUI &#26377;&#33288;&#36259;&#65292;&#20294;&#27794;&#26377;&#25509;&#35320;&#36942; iOS &#38283;&#30332;&#65292;&#25105;&#36996;&#26159;&#35498;&#26126;&#19968;&#19979;&#12290;</p><p>&#38614;&#28982;&#22312;&#38283;&#30332;&#20491;&#21029;&#30059;&#38754;&#26178;&#65292;&#25105;&#20497;&#26371;&#20351;&#29992; Preview &#33287;&#27169;&#25836;&#22120;&#65292;app &#36305;&#22312;&#27169;&#25836;&#22120;&#33287;&#23526;&#38555;&#22312;&#35037;&#32622;&#19978;&#36939;&#20316;&#65292;&#36996;&#26159;&#26371;&#26377;&#19968;&#20123;&#19981;&#21516;&#12290;</p><p>&#23416;&#32722; SwiftUI &#26412;&#36523;&#21482;&#38656;&#35201; Mac&#65292;&#20294;&#22914;&#26524;&#26159;&#38283;&#30332;&#23436;&#25972;&#30340; app &#30340;&#35441;&#65292;&#35201;&#26377;&#23565;&#25033;&#24179;&#21488;&#30340;&#35037;&#32622;&#65292;&#25165;&#33021;&#30906;&#23450;&#31243;&#24335;&#30340;&#21151;&#33021;&#33287;&#20351;&#29992;&#32773;&#39636;&#39511;&#31526;&#21512;&#20320;&#30340;&#26399;&#24453;&#12290;</p><p>SwiftUI &#21487;&#20197;&#29992;&#20358;&#38283;&#30332; iOS app&#65292;&#20197;&#21450; Mac&#12289;Apple Watch&#12289;Apple TV &#19978;&#30340; app&#12290;&#25152;&#20197;&#65292;&#24819;&#35201;&#38283;&#30332; iPhone app &#30340;&#35441;&#65292;&#19968;&#23450;&#35201;&#26377;&#19968;&#21488; iPhone&#65307;&#35201;&#38283;&#30332; iPad app &#23601;&#35201;&#26377;&#19968;&#21488; iPad&#12290;&#19981;&#36942;&#65292;&#22914;&#26524;&#26159;&#38283;&#30332; Mac app &#30340;&#35441;&#65292;&#20498;&#26159;&#19981;&#38656;&#35201;&#28310;&#20633;&#19968;&#21488; iOS &#35037;&#32622;&#12290;</p><h2><strong>&#23567;&#32080;</strong></h2><p>Preview &#26159; SwiftUI &#33021;&#36948;&#21040;&#29983;&#29986;&#21147;&#30340;&#24517;&#35201;&#26781;&#20214;&#12290;&#32780; M1 &#31561;&#32026;&#30340; Mac &#21063;&#26159;&#35731; Preview &#22816;&#29992;&#30340;&#24517;&#35201;&#26781;&#20214;&#12290;&#23416;&#32722; SwiftUI &#30340;&#36335;&#19978;&#26377;&#19968;&#20123;&#21240;&#36864;&#30340;&#23567;&#24618;&#65292;&#20294; Intel Mac &#21205;&#19981;&#21205;&#23601;&#39080;&#25159;&#36215;&#39131;&#12289;Preview &#36305;&#36215;&#20358;&#22826;&#24930;&#20196;&#20154;&#22833;&#21435;&#32784;&#24515;&#65292;&#32943;&#23450;&#26159;&#20854;&#20013;&#30340;&#22823;&#39764;&#29579;&#12290;</p><p>&#25152;&#20197;&#65292;&#20808;&#21435;&#24324;&#19968;&#21488; M1 &#21543;&#128184;</p><p>&#21916;&#27489;&#20170;&#22825;&#30340;&#23560;&#27396;&#30340;&#35712;&#32773;&#65292;&#35531;&#25353;&#19979;&#24859;&#24515;&#10084;&#65039;&#25110;&#30041;&#35328;&#128172;&#65292;&#26356;&#27489;&#36814;&#30452;&#25509;&#22238;&#20449;&#9993;&#65039;&#33287;&#25105;&#20132;&#27969;&#12290;&#25105;&#26371;&#30475;&#22823;&#23478;&#30340;&#21453;&#25033;&#20358;&#35519;&#25972;&#19979;&#19968;&#31687;&#30340;&#30332;&#34920;&#26178;&#38291;&#12290;</p><p>&#20063;&#21029;&#24536;&#20102;&#21040; <a href="https://www.patreon.com/ethanhuang13">Patreon</a> &#35330;&#38321;&#20358;&#25903;&#25345;&#25105;&#32380;&#32396;&#23531;&#20316;&#12290;&#35330;&#38321;&#32773;&#21487;&#20197;&#25654;&#20808;&#35712;&#21040;&#27599;&#19968;&#31687;&#26032;&#25991;&#31456;&#12290;</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI 讀完就入坑]]></title><description><![CDATA[&#23560;&#27396;&#32034;&#24341;]]></description><link>https://www.ethanhuang13.com/p/swiftui-index</link><guid isPermaLink="false">https://www.ethanhuang13.com/p/swiftui-index</guid><dc:creator><![CDATA[13]]></dc:creator><pubDate>Fri, 03 Jun 2022 09:59:00 GMT</pubDate><enclosure url="https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/81dfc855-37d8-4299-a803-074913758b3d_650x504.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4>13 &#30340;&#35441;</h4><blockquote><p><strong>2024 &#24180;&#26356;&#26032;&#65306;</strong></p><p>13 &#22577;&#30340; SwiftUI &#23560;&#27396;&#22312; 2022 &#24180;&#25104;&#31435;&#26178;&#65292;&#23601;&#26159;&#19968;&#20491;&#20184;&#36027;&#23560;&#27396;&#12290;&#21482;&#26159;&#30070;&#26178;&#25105;&#27794;&#26377;&#35373;&#31435;&#20184;&#36027;&#29254;&#65292;&#32780;&#26159;&#25505;&#29992;&#12300;&#35488;&#23526;&#35330;&#38321;&#12301;&#21046;&#24230;&#12290;&#30070;&#26178;&#23601;&#26377;&#19981;&#23569;&#26379;&#21451;&#35330;&#38321;&#20102;&#25105;&#30340; Patreon &#20358;&#25903;&#25345;&#25105;&#23531;&#20316;&#65292;&#38750;&#24120;&#35613;&#35613;&#20320;&#20497;&#65281;</p><p>2024 &#24180; 9 &#26376;&#65292;&#25105;&#21855;&#21205;&#20102; <a href="http://iosdeveloper.plus/">iOS Developer+ &#26371;&#21729;</a>&#65292;<a href="https://ethanhuang13.notion.site/ios-developer-plus-benefits">&#23531;&#20102;&#24456;&#22810;&#25991;&#31456;</a>&#12290;&#28982;&#24460; 11 &#26376;&#22312; iPlayground &#35611;&#20102; SwiftUI&#65292;&#35258;&#24471;&#26377;&#24456;&#22810;&#26481;&#35199;&#21487;&#20197;&#20877;&#36319;&#22823;&#23478;&#20998;&#20139;&#65292;&#25152;&#20197;&#36889;&#20491;&#23560;&#27396;&#21487;&#20197;&#32380;&#32396;&#36899;&#36617;&#20102;&#65374;</p><p>&#35531;&#21152;&#20837; <a href="http://iosdeveloper.plus/">iOS Developer+ &#26371;&#21729;</a>&#20358;&#35264;&#30475;&#23436;&#25972;&#30340;&#25991;&#31456;&#20197;&#21450; #8 &#20043;&#24460;&#30340;&#20839;&#23481;&#12290;&#20063;&#21487;&#20197;<a href="https://ethanhuang13.notion.site/ios-developer-plus-benefits">&#22312;&#36889;&#37002;&#38928;&#35261;</a>&#12290;</p><p><strong>2022 &#24180;&#30340;&#20171;&#32057;&#65306;</strong></p><p>&#29694;&#22312;&#38283;&#22987;&#25509;&#35320; SwiftUI &#27491;&#26159;&#26178;&#20505;&#12290;&#25105;&#24819;&#29992;&#19968;&#31278;&#36629;&#39686;&#30340;&#27683;&#27675;&#24118;&#35712;&#32773;&#35469;&#35672;&#23427;&#12290;</p><p>&#23601;&#31639;&#20320;&#19981;&#29087;&#24713; iOS &#38283;&#30332;&#20063;&#21487;&#20197;&#20139;&#21463;&#20854;&#20013;&#12290;&#23565;&#26044;&#36996;&#26410;&#20837;&#38272; SwiftUI &#30340; iOS &#32769;&#25163;&#20063;&#26371;&#24456;&#26377;&#24171;&#21161;&#12290;</p><p>&#19968;&#36215;&#20358;&#65292;&#35731;&#22909;&#22855;&#24515;&#22823;&#36942;&#30693;&#35672;&#28966;&#24942;&#65281;</p><p>&#26412;&#23560;&#27396;&#25512;&#34214;&#24478;&#38957;&#38283;&#22987;&#38321;&#35712;&#36215;&#12290;</p></blockquote><h3>2022</h3><ul><li><p>06/03 <a href="https://www.ethanhuang13.com/p/swiftui-0-get-a-m1">#0 &#39318;&#20808;&#65292;&#20197; M1 &#28858;&#30446;&#27161;&#21543;</a></p></li><li><p>06/10 <a href="https://www.ethanhuang13.com/p/swiftui-1-prepare-xcode">#1 &#20358;&#25226; Xcode &#25630;&#22909;</a></p></li><li><p>06/17 <a href="https://www.ethanhuang13.com/p/swiftui-2-the-good-the-bad">#2 &#26377;&#20123;&#38988;&#30446;&#36996;&#30495;&#19981;&#36969;&#21512;&#25343;&#20358;&#20837;&#22353;</a></p></li><li><p>07/08 <a href="https://www.ethanhuang13.com/p/swiftui-3-avoid-these-api">#3 &#37027;&#20123;&#19981;&#35442;&#30896;&#30340; SwiftUI API</a></p></li><li><p>07/15 <a href="https://www.ethanhuang13.com/p/swiftui-4-not-just-color">#4 Color &#19981;&#21482;&#26159;&#38991;&#33394;</a></p></li><li><p>08/26 <a href="https://www.ethanhuang13.com/p/swiftui-5-look-at-the-body">#5 &#21482;&#35201;&#30475;&#19968;&#30524; body</a></p></li><li><p>09/07 <a href="https://www.ethanhuang13.com/p/swiftui-6-doc-tools">#6 &#25991;&#20214;&#24037;&#20855;&#33287;&#32178;&#31449;</a></p></li><li><p>10/13 <a href="https://www.ethanhuang13.com/p/swiftui-7-expectation-management">#7 &#19981;&#26399;&#24453;&#23601;&#27794;&#26377;&#20663;&#23475;</a></p></li></ul><h3>2024</h3><ul><li><p>12/2 <a href="https://www.ethanhuang13.com/p/swiftui-8-tca">#8 &#36899;&#36617;&#20877;&#38283;&#12290;&#25551;&#36848;&#24615;&#26694;&#26550;&#12289;&#29376;&#24907;&#39493;&#21205;&#12289;TCA</a></p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.ethanhuang13.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading 13 &#30340; Apple &#38283;&#30332;&#32773;&#38651;&#23376;&#22577;! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>