1<!doctype html> 2<html lang="zh"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><meta name="robots" content="noindex"><meta><title>彿¡£ - LiYanan2004 - æçå客</title><link rel="manifest" href="/manifest.json"><meta name="application-name" content="LiYanan2004 - æçå客"><meta name="msapplication-TileImage" content="/icons/touch-icon-iphone.jpeg"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-title" content="LiYanan2004 - æçå客"><meta name="apple-mobile-web-app-status-bar-style" content="default"><link rel="apple-touch-icon" sizes="144x144" href="/icons/touch-icon-iphone.jpeg"><link rel="apple-touch-icon" sizes="152x152" href="/icons/touch-icon-ipad.jpeg"><link rel="apple-touch-icon" sizes="72x72" href="/icons/favicon.ico"><link rel="apple-touch-icon" sizes="96x96" href="/icons/favicon.ico"><link rel="apple-touch-icon" sizes="128x128" href="/icons/favicon.ico"><link rel="apple-touch-icon" sizes="256x256" href="/icons/favicon.ico"><meta name="description" content="çæè ¾ï¼è®°å½çæ´»"><meta property="og:type" content="blog"><meta property="og:title" content="LiYanan2004 - æçå客"><meta property="og:url" content="https://liyanan2004.github.io/"><meta property="og:site_name" content="LiYanan2004 - æçå客"><meta property="og:description" content="çæè ¾ï¼è®°å½çæ´»"><meta property="og:locale" content="zh_CN"><meta property="og:image" content="https://liyanan2004.github.io/img/og_image.png"><meta property="article:author" content="LiYanan"><meta property="article:tag" content="LiYanan"><meta property="twitter:card" content="summary"><meta property="twitter:image:src" content="https://liyanan2004.github.io/img/og_image.png">
2<script type="application/ld+json">{"@context":"https://schema.org","@type":"BlogPosting","mainEntityOfPage":{"@type":"WebPage","@id":"https://liyanan2004.github.io"},"headline":"LiYanan2004 - æçå客","image":["https://liyanan2004.github.io/img/og_image.png"],"author":{"@type":"Person","name":"LiYanan"},"publisher":{"@type":"Organization","name":"LiYanan2004 - æçå客","logo":{"@type":"ImageObject","url":"https://liyanan2004.github.io/icons/icon.png"}},"description":"çæè
¾ï¼è®°å½çæ´»"}</script>
2<link rel="alternate" href="/atom.xml" title="LiYanan2004 - æçå客" type="application/atom+xml"><link rel="icon" href="/icons/icon.png"><link rel="stylesheet" href="https://cdnjs.loli.net/ajax/libs/font-awesome/6.0.0/css/all.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/styles/atom-one-light.css"><link rel="stylesheet" href="https://fonts.lug.ustc.edu.cn/css2?family=Ubuntu:wght@400;600&family=Source+Code+Pro"><link rel="stylesheet" href="/css/default.css"><style>body>.footer,body>.navbar,body>.section{opacity:0}</style><!--!--><!--!--><!--!-->
2<script src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" defer></script>
2<!--!--><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/lightgallery.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/justifiedGallery.min.css"><!--!--><!--!--><style>.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pace-inactive{display:none}.pace .pace-progress{background:#3273dc;position:fixed;z-index:2000;top:0;right:100%;width:100%;height:2px}</style>
2<script src="https://cdn.jsdelivr.net/npm/[email protected]/pace.min.js"></script>
2<!--!--><!--!--><meta name="follow.it-verification-code" content="K7a6qPhqDkfhuFV53Met"><!-- hexo injector head_end start -->
2<script> 3 (function () { 4 function switchTab() { 5 if (!location.hash) { 6 return; 7 } 8 9 const $tabMenu = document.querySelector(`a[href="${location.hash}"]`); 10 if (!$tabMenu) { 11 return; 12 } 13 14 const $tabMenuContainer = $tabMenu.parentElement.parentElement; 15 Array.from($tabMenuContainer.children).forEach($menu => $menu.classList.remove('is-active')); 16 Array.from($tabMenuContainer.querySelectorAll('a')) 17 .map($menu => document.getElementById($menu.getAttribute("href").substring(1))) 18 .forEach($content => $content.classList.add('is-hidden')); 19 20 if ($tabMenu) { 21 $tabMenu.parentElement.classList.add('is-active'); 22 } 23 const $activeTab = document.querySelector(location.hash); 24 if ($activeTab) { 25 $activeTab.classList.remove('is-hidden'); 26 } 27 } 28 switchTab(); 29 window.addEventListener('hashchange', switchTab, false); 30 })(); 31 </script>
31<!-- hexo injector head_end end --><meta name="generator" content="Hexo 6.3.0"></head><body class="is-3-column"><nav class="navbar navbar-main"><div class="container navbar-container"><div class="navbar-brand justify-content-center"><a class="navbar-item navbar-logo" href="/"><img src="/icons/icon.png" alt="LiYanan2004 - æçå客" height="28"></a></div><div class="navbar-menu"><div class="navbar-start"><a class="navbar-item is-active" href="/archives">æ¶é´çº¿</a><a class="navbar-item" href="/photos">ç¸å</a><a class="navbar-item" href="/about">å
³äºæ</a><a class="navbar-item" href="/messages">çè¨æ¿</a></div><div class="navbar-end"><a class="navbar-item" target="_blank" rel="noopener" title="Chat_with_ME" href="/talk-with-me"><i class="fa fa-comments"></i></a><a class="navbar-item" target="_blank" rel="noopener" title="GitHub" href="https://github.com/LiYanan2004"><i class="fab fa-github"></i></a><a class="navbar-item search" title="æç´¢" href="javascript:;"><i class="fas fa-search"></i></a></div></div></div></nav><section class="section"><div class="container"><div class="columns"><div class="column order-2 column-main is-8-tablet is-8-desktop is-6-widescreen"><div class="card"><div class="card-content"><h3 class="tag is-primary">2024</h3><div class="timeline"><article class="media"><div class="media-content"><p class="date"><time dateTime="2024-02-18T08:43:14.131Z">2024-02-18</time></p><p class="title"><a href="/megax/">Say Hello to MegaX</a></p><p class="categories"><a href="/categories/%E6%92%B8%E4%BB%A3%E7%A0%81/">æ¸ä»£ç </a></p></div></article></div></div></div><div class="card"><div class="card-content"><h3 class="tag is-primary">2023</h3><div class="timeline"><article class="media"><div class="media-content"><p class="date"><time dateTime="2023-09-10T05:42:57.124Z">2023-09-10</time></p><p class="title"><a href="/inherit-namespace-in-swiftui/">åæ´å°ç SwiftUI 代ç ââ Namespace</a></p><p class="categories"><a href="/categories/%E6%92%B8%E4%BB%A3%E7%A0%81/">æ¸ä»£ç </a></p></div></article><article class="media"><div class="media-content"><p class="date"><time dateTime="2023-09-09T08:09:29.977Z">2023-09-09</time></p><p class="title"><a href="/2023-summer-summary/">2023 æåæ»ç»</a></p></div></article><article class="media"><div class="media-content"><p class="date"><time dateTime="2023-07-30T12:08:47.114Z">2023-07-30</time></p><p class="title"><a href="/make-everything-equatable/">å°æå·§ï¼è®©ä»»ä½ç±»åéµå¾ª Equatable</a></p><p class="categories"><a href="/categories/%E6%92%B8%E4%BB%A3%E7%A0%81/">æ¸ä»£ç </a></p></div></article><article class="media"><div class="media-content"><p class="date"><time dateTime="2023-07-27T04:40:52.272Z">2023-07-27</time></p><p class="title"><a href="/meet-tipkit/">è¯è¯æ°æ¡æ¶ â TipKit</a></p><p class="categories"><a href="/categories/%E6%92%B8%E4%BB%A3%E7%A0%81/">æ¸ä»£ç </a></p></div></article><article class="media"><div class="media-content"><p class="date"><time dateTime="2023-07-23T03:13:03.829Z">2023-07-23</time></p><p class="title"><a href="/terminal-window-swiftui/">ç¨ SwiftUI å个ç»ç«¯</a></p><p class="categories"><a href="/categories/%E6%92%B8%E4%BB%A3%E7%A0%81/">æ¸ä»£ç </a></p></div></article><article class="media"><div class="media-content"><p class="date"><time dateTime="2023-06-19T03:59:09.888Z">2023-06-19</time></p><p class="title"><a href="/lock-orientation-in-swiftui/">å¨ SwiftUI ä¸å®ç°é¡µé¢çæ¹åéå®</a></p><p class="categories"><a href="/categories/%E6%92%B8%E4%BB%A3%E7%A0%81/">æ¸ä»£ç </a></p></div></article><article class="media"><div class="media-content"><p class="date"><time dateTime="2023-06-17T14:55:16.000Z">2023-06-17</time></p><p class="title"><a href="/meet-swift-data/">Swift Data ç忥æ¢ç´¢</a></p><p class="categories"><a href="/categories/%E6%92%B8%E4%BB%A3%E7%A0%81/">æ¸ä»£ç </a></p></div></article><article class="media"><div class="media-content"><p class="date"><time dateTime="2023-06-07T02:44:08.000Z">2023-06-07</time></p><p class="title"><a href="/wwdc-23-whats-new-in-swiftui/">SwiftUI æ°åè½</a></p><p class="categories"><a href="/categories/%E6%92%B8%E4%BB%A3%E7%A0%81/">æ¸ä»£ç </a></p></div></article><article class="media"><div class="media-content"><p class="date"><time dateTime="2023-05-01T13:50:45.000Z">2023-05-01</time></p><p class="title"><a href="/open-menu-bar-extra-with-apple-script/">ç¨ Apple Script æå¼ä»»å¡æ èå</a></p><p class="categories">
31<a href="/categories/%E7%9E%8E%E6%8A%98%E8%85%BE/">çæè
¾</a></p></div></article></div></div></div><nav class="pagination" role="navigation" aria-label="pagination"><div class="pagination-previous is-invisible is-hidden-mobile"><a href="/archives/page/0/">ä¸ä¸é¡µ</a></div><div class="pagination-next"><a href="/archives/page/2/">ä¸ä¸é¡µ</a></div><ul class="pagination-list is-hidden-mobile"><li><a class="pagination-link is-current" href="/archives/">1</a></li><li><a class="pagination-link" href="/archives/page/2/">2</a></li><li><a class="pagination-link" href="/archives/page/3/">3</a></li><li><a class="pagination-link" href="/archives/page/4/">4</a></li></ul></nav></div><div class="column column-left is-4-tablet is-4-desktop is-3-widescreen order-1 is-sticky"><!--!--><div class="card widget" data-type="profile"><div class="card-content"><nav class="level"><div class="level-item has-text-centered flex-shrink-1"><div><figure class="image is-128x128 mx-auto mb-2"><img class="avatar" src="/icons/icon.png" alt="LiYanan2004"></figure><p class="title is-size-4 is-block" style="line-height:inherit;">LiYanan2004</p><p class="is-size-6 is-block">â¤ï¸ A Student of SUEP â¤ï¸</p><p class="is-size-6 is-flex justify-content-center"><i class="fas fa-map-marker-alt mr-1"></i><span>Shanghai, China</span></p></div></div></nav><nav class="level is-mobile"><div class="level-item has-text-centered is-marginless"><div><p class="heading">æç« </p><a href="/archives"><p class="title">31</p></a></div></div><div class="level-item has-text-centered is-marginless"><div><p class="heading">åç±»</p><a href="/categories"><p class="title">5</p></a></div></div><div class="level-item has-text-centered is-marginless"><div><p class="heading">æ ç¾</p><a href="/tags"><p class="title">36</p></a></div></div></nav><div class="level"><a class="level-item button is-primary is-rounded" href="https://github.com/LiYanan2004" target="_blank" rel="noopener">å
³æ³¨æ</a></div><div class="level is-mobile is-multiline"><a class="level-item button is-transparent is-marginless" target="_blank" rel="noopener" title="Github" href="https://github.com/LiYanan2004"><i class="fab fa-github"></i></a><a class="level-item button is-transparent is-marginless" target="_blank" rel="noopener" title="Mail Me" href="mailto:[email protected]"><i class="fa fa-envelope"></i></a><a class="level-item button is-transparent is-marginless" target="_blank" rel="noopener" title="RSS" href="/atom.xml"><i class="fas fa-rss"></i></a></div></div></div><div class="card widget" data-type="categories"><div class="card-content"><div class="menu"><h3 class="menu-label">åç±»</h3><ul class="menu-list"><li><a class="level is-mobile" href="/categories/%E5%90%90%E4%B8%AA%E6%A7%BD/"><span class="level-start"><span class="level-item">å个槽</span></span><span class="level-end"><span class="level-item tag">2</span></span></a></li><li><a class="level is-mobile" href="/categories/%E5%AD%A6%E4%B8%AA%E4%B9%A0/"><span class="level-start"><span class="level-item">å¦ä¸ªä¹ </span></span><span class="level-end"><span class="level-item tag">2</span></span></a></li><li><a class="level is-mobile" href="/categories/%E6%92%B8%E4%BB%A3%E7%A0%81/"><span class="level-start"><span class="level-item">æ¸ä»£ç </span></span><span class="level-end"><span class="level-item tag">19</span></span></a></li><li><a class="level is-mobile" href="/categories/%E6%96%B0%E7%8E%A9%E5%85%B7/"><span class="level-start"><span class="level-item">æ°ç©å
·</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-mobile" href="/categories/%E7%9E%8E%E6%8A%98%E8%85%BE/"><span class="level-start"><span class="level-item">çæè
¾</span></span><span class="level-end"><span class="level-item tag">6</span></span></a></li></ul></div></div></div><div class="column-right-shadow is-hidden-widescreen"></div></div><div class="column column-right is-4-tablet is-4-desktop is-3-widescreen is-hidden-touch is-hidden-desktop-only order-3"><div class="card widget" data-type="recent-posts"><div class="card-content"><h3 class="menu-label">ææ°æç« </h3><article class="media"><div class="media-content"><p class="date"><time dateTime="2024-02-18T08:43:14.131Z">2024-02-18</time></p><p class="title"><a href="/megax/">Say Hello to MegaX</a></p><p class="categories"><a href="/categories/%E6%92%B8%E4%BB%A3%E7%A0%81/">æ¸ä»£ç </a></p></div></article><article class="media"><div class="media-content"><p class="date"><time dateTime="2023-09-10T05:42:57.124Z">2023-09-10</time></p><p class="title"><a href="/inherit-namespace-in-swiftui/">åæ´å°ç SwiftUI 代ç ââ Namespace</a></p><p class="categories"><a href="/categories/%E6%92%B8%E4%BB%A3%E7%A0%81/">æ¸ä»£ç </a></p></div></article><article class="media"><div class="media-content"><p class="date"><time dateTime="2023-09-09T08:09:29.977Z">2023-09-09</time></p><p class="title"><a href="/2023-summer-summary/">2023 æåæ»ç»</a></p></div></article><article class="media"><div class="media-content"><p class="date"><time dateTime="2023-07-30T12:08:47.114Z">2023-07-30</time></p><p class="title"><a href="/make-everything-equatable/">å°æå·§ï¼è®©ä»»ä½ç±»åéµå¾ª Equatable</a></p><p class="categories"><a href="/categories/%E6%92%B8%E4%BB%A3%E7%A0%81/">æ¸ä»£ç </a></p></div></article><article class="media"><div class="media-content"><p class="date"><time dateTime="2023-07-27T04:40:52.272Z">2023-07-27</time></p><p class="title"><a href="/meet-tipkit/">è¯è¯æ°æ¡æ¶ â TipKit</a></p><p class="categories"><a href="/categories/%E6%92%B8%E4%BB%A3%E7%A0%81/">æ¸ä»£ç </a></p></div></article></div></div><div class="card widget" data-type="subscribe-email"><div class="card-content"><div class="menu"><h3 class="menu-label">follow.it</h3><form action="https://api.follow.it/subscription-form/c3M2OW8yVnRqMW5xSkFTTzBiSHovSHNQWmdwSFdnZWZ6RWR3Y0VJMHF
31xRUViRmZxYlhBR0wxam9sMGRSU2ZyaE1RQ2pEeEJJY0RodkFVS05XTnZ3U21XbWZTRUwyemJaQTBtUEdvNUJOS3Z0WCs1T2tQbURvOUlQcDQxaEZoS1J8SWRqMER0VVNFUFdPVnNaMUc1RWI2ZTNkaDdtTEd6NXVaMVkvRVFLWWw2VT0=/8" method="post" target="_blank"><div class="field has-addons"><div class="control has-icons-left is-expanded"><input class="input" name="email" type="email" placeholder="Email"><span class="icon is-small is-left"><i class="fas fa-envelope"></i></span></div><div class="control"><input class="button" type="submit" value="订é
"></div></div><p class="help">çä¸é®ç®±ï¼ç¬¬ä¸æ¶é´æ¥æ¶æ°æ¨æï¼</p></form></div></div></div><div class="card widget" data-type="links"><div class="card-content"><div class="menu"><h3 class="menu-label">龿¥</h3><ul class="menu-list"><li><a class="level is-mobile" href="https://hexo.io" target="_blank" rel="noopener"><span class="level-left"><span class="level-item">Hexo</span></span><span class="level-right"><span class="level-item tag">hexo.io</span></span></a></li><li><a class="level is-mobile" href="https://ppoffice.github.io/hexo-theme-icarus/tags/Icarusç¨æ·æå/" target="_blank" rel="noopener"><span class="level-left"><span class="level-item">Icarus</span></span><span class="level-right"><span class="level-item tag">ppoffice.github.io</span></span></a></li></ul></div></div></div></div></div></div></section><footer class="footer"><div class="container"><div class="level"><div class="level-start"><a class="footer-logo is-block mb-2" href="/"><img src="/icons/icon.png" alt="LiYanan2004 - æçå客" height="28"></a><p class="is-size-7"><span>© 2024 LiYanan</span>  Powered by <a href="https://hexo.io/" target="_blank" rel="noopener">Hexo</a> & <a href="https://github.com/ppoffice/hexo-theme-icarus" target="_blank" rel="noopener">Icarus</a><br><span id="busuanzi_container_site_uv">å
±<span id="busuanzi_value_site_uv">0</span>个访客</span></p></div><div class="level-end"><div class="field has-addons"><p class="control"><a class="button is-transparent is-large" target="_blank" rel="noopener" title="Creative Commons" href="https://creativecommons.org/"><i class="fab fa-creative-commons"></i></a></p><p class="control"><a class="button is-transparent is-large" target="_blank" rel="noopener" title="Attribution 4.0 International" href="https://creativecommons.org/licenses/by/4.0/"><i class="fab fa-creative-commons-by"></i></a></p><p class="control"><a class="button is-transparent is-large" target="_blank" rel="noopener" title="GitHub" href="https://github.com/LiYanan2004"><i class="fab fa-github"></i></a></p></div></div></div></div></footer>
31<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js"></script>
31<script src="https://cdn.jsdelivr.net/npm/[email protected]/min/moment-with-locales.min.js"></script>
31<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/clipboard.min.js" defer></script>
31<script>moment.locale("zh-CN");</script>
31<script>var IcarusThemeSettings = { 32 article: { 33 highlight: { 34 clipboard: true, 35 fold: 'unfolded' 36 } 37 } 38 };</script>
38<script src="/js/column.js"></script>
38<script src="/js/animation.js"></script>
38<a id="back-to-top" title="åå°é¡¶ç«¯" href="javascript:;"><i class="fas fa-chevron-up"></i></a>
38<script src="/js/back_to_top.js" defer></script>
38<!--!--><!--!--><!--!--><!--!-->
38<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/lightgallery.min.js" defer></script>
38<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/jquery.justifiedGallery.min.js" defer></script>
38<script>window.addEventListener("load", () => { 39 if (typeof $.fn.lightGallery === 'function') { 40 $('.article').lightGallery({ selector: '.gallery-item' }); 41 } 42 if (typeof $.fn.justifiedGallery === 'function') { 43 if ($('.justified-gallery > p > .gallery-item').length) { 44 $('.justified-gallery > p > .gallery-item').unwrap(); 45 } 46 $('.justified-gallery').justifiedGallery(); 47 } 48 });</script>
48<!--!--><!--!--><!--!--><!--!--><!--!-->
48<script src="/js/main.js" defer></script>
48<div class="searchbox"><div class="searchbox-container"><div class="searchbox-header"><div class="searchbox-input-container"><input class="searchbox-input" type="text" placeholder="æ³è¦æ¥æ¾ä»ä¹..."></div><a class="searchbox-close" href="javascript:;">Ã</a></div><div class="searchbox-body"></div></div></div>
48<script src="/js/insight.js" defer></script>
48<script>document.addEventListener('DOMContentLoaded', function () { 49 loadInsight({"contentUrl":"/content.json"}, {"hint":"æ³è¦æ¥æ¾ä»ä¹...","untitled":"(æ æ é¢)","posts":"æç« ","pages":"页é¢","categories":"åç±»","tags":"æ ç¾"}); 50 });</script>
50</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.