PageSourceSearch

https://zxfcumtcs.github.io/

html zxfcumtcs.github.io collected 2026-10-03 10:15:26 UTC 51,037 bytes, 2,304 lines download raw bytes

1<!DOCTYPE html>
2
3
4
5  
6
7
8<html class="theme-next pisces use-motion" lang="zh-Hans">
9<head><meta name="generator" content="Hexo 3.8.0">
10  <meta charset="UTF-8">
11<meta http-equiv="X-UA-Compatible" content="IE=edge">
12<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
13<meta name="theme-color" content="#222">
14
15
16
17
18
19
20
21
22
23<meta http-equiv="Cache-Control" content="no-transform">
24<meta http-equiv="Cache-Control" content="no-siteapp">
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40  
41  
42  <link href="/lib/fancybox/source/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css">
43
44
45
46
47  
48  
49  
50  
51
52  
53    
54    
55  
56
57  
58
59  
60
61  
62
63  
64
65  
66    
67    
68    <link href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic&subset=latin,latin-ext" rel="stylesheet" type="text/css">
69  
70
71
72
73
74
75
76<link href="/lib/font-awesome/css/font-awesome.min.css?v=4.6.2" rel="stylesheet" type="text/css">
77
78<link href="/css/main.css?v=5.1.2" rel="stylesheet" type="text/css">
79
80
81  <meta name="keywords" content="Hexo, NexT">
82
83
84
85
86
87  <link rel="alternate" href="/atom.xml" title="雪峰的blog" type="application/atom+xml">
88
89
90
91
92  <link rel="shortcut icon" type="image/x-icon" href="/images/favicon.ico?v=5.1.2">
93
94
95
96
97
98
99<meta name="description" content="记录技术点滴">
100<meta property="og:type" content="website">
101<meta property="og:title" content="雪峰的blog">
102<meta property="og:url" content="http://zxfcumtcs.github.io/index.html">
103<meta property="og:site_name" content="雪峰的blog">
104<meta property="og:description" content="记录技术点滴">
105<meta property="og:locale" content="zh-Hans">
106<meta name="twitter:card" content="summary">
107<meta name="twitter:title" content="雪峰的blog">
108<meta name="twitter:description" content="记录技术点滴">
109
110
111
112<script type="text/javascript" id="hexo.configurations">
113  var NexT = window.NexT || {};
114  var CONFIG = {
115    root: '/',
116    scheme: 'Pisces',
117    sidebar: {"position":"left","display":"post","offset":12,"offset_float":12,"b2t":false,"scrollpercent":false,"onmobile":false},
118    fancybox: true,
119    tabs: true,
120    motion: true,
121    duoshuo: {
122      userId: '0',
123      author: '博主'
124    },
125    algolia: {
126      applicationID: '',
127      apiKey: '',
128      indexName: '',
129      hits: {"per_page":10},
130      labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
131    }
132  };
133</script>
133
134
135
136
137  <link rel="canonical" href="http://zxfcumtcs.github.io/">
138
139
140
141
142
143  <title>雪峰的blog</title>
144  
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159</head>
160
161<body itemscope="" itemtype="http://schema.org/WebPage" lang="zh-Hans">
162
163  
164  
165    
166  
167
168  <div class="container sidebar-position-left 
169   page-home 
170 ">
171    <div class="headband"></div>
172
173    <header id="header" class="header" itemscope="" itemtype="http://schema.org/WPHeader">
174      <div class="header-inner"><div class="site-brand-wrapper">
175  <div class="site-meta ">
176    
177
178    <div class="custom-logo-site-title">
179      <a href="/" class="brand" rel="start">
180        <span class="logo-line-before"><i></i></span>
181        <span class="site-title">雪峰的blog</span>
182        <span class="logo-line-after"><i></i></span>
183      </a>
184    </div>
185      
186        <p class="site-subtitle">善于总结, 乐于分享</p>
187      
188  </div>
189
190  <div class="site-nav-toggle">
191    <button>
192      <span class="btn-bar"></span>
193      <span class="btn-bar"></span>
194      <span class="btn-bar"></span>
195    </button>
196  </div>
197</div>
198
199<nav class="site-nav">
200  
201
202  
203    <ul id="menu" class="menu">
204      
205        
206        <li class="menu-item menu-item-home">
207          <a href="/" rel="section">
208            
209              <i class="menu-item-icon fa fa-fw fa-home"></i> <br>
210            
211            首页
212          </a>
213        </li>
214      
215        
216        <li class="menu-item menu-item-about">
217          <a href="/about/" rel="section">
218            
219              <i class="menu-item-icon fa fa-fw fa-user"></i> <br>
220            
221            关于
222          </a>
223        </li>
224      
225        
226        <li class="menu-item menu-item-archives">
227          <a href="/archives/" rel="section">
228            
229              <i class="menu-item-icon fa fa-fw fa-archive"></i> <br>
230            
231            归档
232          </a>
233        </li>
234      
235        
236        <li class="menu-item menu-item-tags">
237          <a href="/tags/" rel="section">
238            
239              <i class="menu-item-icon fa fa-fw fa-tags"></i> <br>
240            
241            标签
242          </a>
243        </li>
244      
245
246      
247    </ul>
248  
249
250  
251</nav>
252
253
254
255 </div>
256    </header>
257
258    <main id="main" class="main">
259      <div class="main-inner">
260        <div class="content-wrap">
261          <div id="content" class="content">
262            
263  <section id="posts" class="posts-expand">
264    
265      
266
267  
268
269  
270  
271  
272
273  <article class="post post-type-normal" itemscope="" itemtype="http://schema.org/Article">
274  
275  
276  
277  <div class="post-block">
278    <link itemprop="mainEntityOfPage" href="http://zxfcumtcs.github.io/2022/06/30/SwiftProtocol3/">
279
280    <span hidden itemprop="author" itemscope="" itemtype="http://schema.org/Person">
281      <meta itemprop="name" content="赵雪峰">
282      <meta itemprop="description" content="">
283      <meta itemprop="image" content="/img/author.jpg">
284    </span>
285
286    <span hidden itemprop="publisher" itemscope="" itemtype="http://schema.org/Organization">
287      <meta itemprop="name" content="雪峰的blog">
288    </span>
289
290    
291      <header class="post-header">
292
293        
294        
295          <h1 class="post-title" itemprop="name headline">
296                
297                <a class="post-title-link" href="/2022/06/30/SwiftProtocol3/" itemprop="url">Swift Protocol 背后的故事(Swift 5.6/5.7)</a></h1>
298        
299
300        <div class="post-meta">
301          <span class="post-time">
302            
303              <span class="post-meta-item-icon">
304                <i class="fa fa-calendar-o"></i>
305              </span>
306              
307                <span class="post-meta-item-text">发表于</span>
308              
309              <time title="创建于" itemprop="dateCreated datePublished" datetime="2022-06-30T22:21:10+08:00">
310                2022-06-30
311              </time>
312            
313
314            
315
316            
317          </span>
318
319          
320
321          
322            
323          
324
325          
326          
327             <span id="/2022/06/30/SwiftProtocol3/" class="leancloud_visitors" data-flag-title="Swift Protocol 背后的故事(Swift 5.6/5.7)">
328               
329             </span>
330          
331          
332
333          
334
335          
336            <div class="post-wordcount">
337              
338                
339                  <span class="post-meta-divider">|</span>
340                
341                <span class="post-meta-item-icon">
342                  <i class="fa fa-file-word-o"></i>
343                </span>
344                
345                  <span class="post-meta-item-text">字数统计</span>
346                
347                <span title="字数统计">
348                  3,112
349                </span>
350              
351
352              
353                <span class="post-meta-divider">|</span>
354              
355
356              
357                <span class="post-meta-item-icon">
358                  <i class="fa fa-clock-o"></i>
359                </span>
360                
361                  <span class="post-meta-item-text">阅读时长</span>
362                
363                <span title="阅读时长">
364                  14
365                </span>
366              
367            </div>
368          
369
370          
371
372        </div>
373      </header>
374    
375
376    
377    
378    
379    <div class="post-body" itemprop="articleBody">
380
381      
382      
383
384      
385        
386          <p>本系列文章将从实践技巧、实现原理以及追踪语言更新等方面对 Swift Protocol 展开深入讨论。主要内容有:</p>
387<p><a href="https://zxfcumtcs.github.io/2022/02/01/SwiftProtocol1/">Swift Protocol 背后的故事(实践)</a><br><a href="https://zxfcumtcs.github.io/2022/02/04/SwiftProtocol2/">Swift Protocol 背后的故事(理论)</a><br>Swift Protocol 背后的故事(Swift 5.6/5.7)<br>…</p>
388<p>本文是系列文章第三篇,简要介绍 Swift 5.6/5.7 在 Protocol 上的相关扩展和优化,主要包括:<code>any</code>、Opaque Parameter、Unlock existentials for all protocols 以及 Primary Associated Types。</p>
389          <!--noindex-->
390          <div class="post-button text-center">
391            <a class="btn" href="/2022/06/30/SwiftProtocol3/#more" rel="contents">
392              阅读全文 &raquo;
393            </a>
394          </div>
395          <!--/noindex-->
396        
397      
398    </div>
399    
400    
401    
402
403    
404
405    
406
407    
408
409    <footer class="post-footer">
410      
411
412      
413
414      
415
416      
417      
418        <div class="post-eof"></div>
419      
420    </footer>
421  </div>
422  
423  
424  
425  </article>
426
427
428    
429      
430
431  
432
433  
434  
435  
436
437  <article class="post post-type-normal" itemscope="" itemtype="http://schema.org/Article">
438  
439  
440  
441  <div class="post-block">
442    <link itemprop="mainEntityOfPage" href="http://zxfcumtcs.github.io/2022/04/03/SwiftModernConcurrency-task/">
443
444    <span hidden itemprop="author" itemscope="" itemtype="http://schema.org/Person">
445      <meta itemprop="name" content="赵雪峰">
446      <meta itemprop="description" content="">
447      <meta itemprop="image" content="/img/author.jpg">
448    </span>
449
450    <span hidden itemprop="publisher" itemscope="" itemtype="http://schema.org/Organization">
451      <meta itemprop="name" content="雪峰的blog">
452    </span>
453
454    
455      <header class="post-header">
456
457        
458        
459          <h1 class="post-title" itemprop="name headline">
460                
461                <a class="post-title-link" href="/2022/04/03/SwiftModernConcurrency-task/" itemprop="url">Swift 新并发框架之 Task</a></h1>
462        
463
464        <div class="post-meta">
465          <span class="post-time">
466            
467              <span class="post-meta-item-icon">
468                <i class="fa fa-calendar-o"></i>
469              </span>
470              
471                <span class="post-meta-item-text">发表于</span>
472              
473              <time title="创建于" itemprop="dateCreated datePublished" datetime="2022-04-03T22:16:43+08:00">
474                2022-04-03
475              </time>
476            
477
478            
479
480            
481          </span>
482
483          
484
485          
486            
487          
488
489          
490          
491             <span id="/2022/04/03/SwiftModernConcurrency-task/" class="leancloud_visitors" data-flag-title="Swift 新并发框架之 Task">
492               
493             </span>
494          
495          
496
497          
498
499          
500            <div class="post-wordcount">
501              
502                
503                  <span class="post-meta-divider">|</span>
504                
505                <span class="post-meta-item-icon">
506                  <i class="fa fa-file-word-o"></i>
507                </span>
508                
509                  <span class="post-meta-item-text">字数统计</span>
510                
511                <span title="字数统计">
512                  3,461
513                </span>
514              
515
516              
517                <span class="post-meta-divider">|</span>
518              
519
520              
521                <span class="post-meta-item-icon">
522                  <i class="fa fa-clock-o"></i>
523                </span>
524                
525                  <span class="post-meta-item-text">阅读时长</span>
526                
527                <span title="阅读时长">
528                  15
529                </span>
530              
531            </div>
532          
533
534          
535
536        </div>
537      </header>
538    
539
540    
541    
542    
543    <div class="post-body" itemprop="articleBody">
544
545      
546      
547
548      
549        
550          <p>本文是 『 Swift 新并发框架 』系列文章的第四篇,主要介绍基于 Task 的结构化并发 (Structured concurrency) 和 非结构化并发任务 (Unstructured tasks)。</p>
551          <!--noindex-->
552          <div class="post-button text-center">
553            <a class="btn" href="/2022/04/03/SwiftModernConcurrency-task/#more" rel="contents">
554              阅读全文 &raquo;
555            </a>
556          </div>
557          <!--/noindex-->
558        
559      
560    </div>
561    
562    
563    
564
565    
566
567    
568
569    
570
571    <footer class="post-footer">
572      
573
574      
575
576      
577
578      
579      
580        <div class="post-eof"></div>
581      
582    </footer>
583  </div>
584  
585  
586  
587  </article>
588
589
590    
591      
592
593  
594
595  
596  
597  
598
599  <article class="post post-type-normal" itemscope="" itemtype="http://schema.org/Article">
600  
601  
602  
603  <div class="post-block">
604    <link itemprop="mainEntityOfPage" href="http://zxfcumtcs.github.io/2022/03/19/SwiftModernConcurrency-sendable/">
605
606    <span hidden itemprop="author" itemscope="" itemtype="http://schema.org/Person">
607      <meta itemprop="name" content="赵雪峰">
608      <meta itemprop="description" content="">
609      <meta itemprop="image" content="/img/author.jpg">
610    </span>
611
612    <span hidden itemprop="publisher" itemscope="" itemtype="http://schema.org/Organization">
613      <meta itemprop="name" content="雪峰的blog">
614    </span>
615
616    
617      <header class="post-header">
618
619        
620        
621          <h1 class="post-title" itemprop="name headline">
622                
623                <a class="post-title-link" href="/2022/03/19/SwiftModernConcurrency-sendable/" itemprop="url">Swift 新并发框架之 Sendable</a></h1>
624        
625
626        <div class="post-meta">
627          <span class="post-time">
628            
629              <span class="post-meta-item-icon">
630                <i class="fa fa-calendar-o"></i>
631              </span>
632              
633                <span class="post-meta-item-text">发表于</span>
634              
635              <time title="创建于" itemprop="dateCreated datePublished" datetime="2022-03-19T15:46:45+08:00">
636                2022-03-19
637              </time>
638            
639
640            
641
642            
643          </span>
644
645          
646
647          
648            
649          
650
651          
652          
653             <span id="/2022/03/19/SwiftModernConcurrency-sendable/" class="leancloud_visitors" data-flag-title="Swift 新并发框架之 Sendable">
654               
655             </span>
656          
657          
658
659          
660
661          
662            <div class="post-wordcount">
663              
664                
665                  <span class="post-meta-divider">|</span>
666                
667                <span class="post-meta-item-icon">
668                  <i class="fa fa-file-word-o"></i>
669                </span>
670                
671                  <span class="post-meta-item-text">字数统计</span>
672                
673                <span title="字数统计">
674                  2,007
675                </span>
676              
677
678              
679                <span class="post-meta-divider">|</span>
680              
681
682              
683                <span class="post-meta-item-icon">
684                  <i class="fa fa-clock-o"></i>
685                </span>
686                
687                  <span class="post-meta-item-text">阅读时长</span>
688                
689                <span title="阅读时长">
690                  9
691                </span>
692              
693            </div>
694          
695
696          
697
698        </div>
699      </header>
700    
701
702    
703    
704    
705    <div class="post-body" itemprop="articleBody">
706
707      
708      
709
710      
711        
712          <p>本文是 『 Swift 新并发框架 』系列文章的第三篇,主要介绍 Swift 5.6 引入的 Sendable。</p>
713          <!--noindex-->
714          <div class="post-button text-center">
715            <a class="btn" href="/2022/03/19/SwiftModernConcurrency-sendable/#more" rel="contents">
716              阅读全文 &raquo;
717            </a>
718          </div>
719          <!--/noindex-->
720        
721      
722    </div>
723    
724    
725    
726
727    
728
729    
730
731    
732
733    <footer class="post-footer">
734      
735
736      
737
738      
739
740      
741      
742        <div class="post-eof"></div>
743      
744    </footer>
745  </div>
746  
747  
748  
749  </article>
750
751
752    
753      
754
755  
756
757  
758  
759  
760
761  <article class="post post-type-normal" itemscope="" itemtype="http://schema.org/Article">
762  
763  
764  
765  <div class="post-block">
766    <link itemprop="mainEntityOfPage" href="http://zxfcumtcs.github.io/2022/03/19/SwiftModernConcurrency-actor/">
767
768    <span hidden itemprop="author" itemscope="" itemtype="http://schema.org/Person">
769      <meta itemprop="name" content="赵雪峰">
770      <meta itemprop="description" content="">
771      <meta itemprop="image" content="/img/author.jpg">
772    </span>
773
774    <span hidden itemprop="publisher" itemscope="" itemtype="http://schema.org/Organization">
775      <meta itemprop="name" content="雪峰的blog">
776    </span>
777
778    
779      <header class="post-header">
780
781        
782        
783          <h1 class="post-title" itemprop="name headline">
784                
785                <a class="post-title-link" href="/2022/03/19/SwiftModernConcurrency-actor/" itemprop="url">Swift 新并发框架之 actor</a></h1>
786        
787
788        <div class="post-meta">
789          <span class="post-time">
790            
791              <span class="post-meta-item-icon">
792                <i class="fa fa-calendar-o"></i>
793              </span>
794              
795                <span class="post-meta-item-text">发表于</span>
796              
797              <time title="创建于" itemprop="dateCreated datePublished" datetime="2022-03-19T08:48:09+08:00">
798                2022-03-19
799              </time>
800            
801
802            
803
804            
805          </span>
806
807          
808
809          
810            
811          
812
813          
814          
815             <span id="/2022/03/19/SwiftModernConcurrency-actor/" class="leancloud_visitors" data-flag-title="Swift 新并发框架之 actor">
816               
817             </span>
818          
819          
820
821          
822
823          
824            <div class="post-wordcount">
825              
826                
827                  <span class="post-meta-divider">|</span>
828                
829                <span class="post-meta-item-icon">
830                  <i class="fa fa-file-word-o"></i>
831                </span>
832                
833                  <span class="post-meta-item-text">字数统计</span>
834                
835                <span title="字数统计">
836                  3,550
837                </span>
838              
839
840              
841                <span class="post-meta-divider">|</span>
842              
843
844              
845                <span class="post-meta-item-icon">
846                  <i class="fa fa-clock-o"></i>
847                </span>
848                
849                  <span class="post-meta-item-text">阅读时长</span>
850                
851                <span title="阅读时长">
852                  17
853                </span>
854              
855            </div>
856          
857
858          
859
860        </div>
861      </header>
862    
863
864    
865    
866    
867    <div class="post-body" itemprop="articleBody">
868
869      
870      
871
872      
873        
874          <p>本文是 『 Swift 新并发框架 』系列文章的第二篇,主要介绍 Swift 5.5 引入的 actor。</p>
875          <!--noindex-->
876          <div class="post-button text-center">
877            <a class="btn" href="/2022/03/19/SwiftModernConcurrency-actor/#more" rel="contents">
878              阅读全文 &raquo;
879            </a>
880          </div>
881          <!--/noindex-->
882        
883      
884    </div>
885    
886    
887    
888
889    
890
891    
892
893    
894
895    <footer class="post-footer">
896      
897
898      
899
900      
901
902      
903      
904        <div class="post-eof"></div>
905      
906    </footer>
907  </div>
908  
909  
910  
911  </article>
912
913
914    
915      
916
917  
918
919  
920  
921  
922
923  <article class="post post-type-normal" itemscope="" itemtype="http://schema.org/Article">
924  
925  
926  
927  <div class="post-block">
928    <link itemprop="mainEntityOfPage" href="http://zxfcumtcs.github.io/2022/03/18/SwiftModernConcurrency-asyncawait/">
929
930    <span hidden itemprop="author" itemscope="" itemtype="http://schema.org/Person">
931      <meta itemprop="name" content="赵雪峰">
932      <meta itemprop="description" content="">
933      <meta itemprop="image" content="/img/author.jpg">
934    </span>
935
936    <span hidden itemprop="publisher" itemscope="" itemtype="http://schema.org/Organization">
937      <meta itemprop="name" content="雪峰的blog">
938    </span>
939
940    
941      <header class="post-header">
942
943        
944        
945          <h1 class="post-title" itemprop="name headline">
946                
947                <a class="post-title-link" href="/2022/03/18/SwiftModernConcurrency-asyncawait/" itemprop="url">Swift 新并发框架之 async/await</a></h1>
948        
949
950        <div class="post-meta">
951          <span class="post-time">
952            
953              <span class="post-meta-item-icon">
954                <i class="fa fa-calendar-o"></i>
955              </span>
956              
957                <span class="post-meta-item-text">发表于</span>
958              
959              <time title="创建于" itemprop="dateCreated datePublished" datetime="2022-03-18T22:00:56+08:00">
960                2022-03-18
961              </time>
962            
963
964            
965
966            
967          </span>
968
969          
970
971          
972            
973          
974
975          
976          
977             <span id="/2022/03/18/SwiftModernConcurrency-asyncawait/" class="leancloud_visitors" data-flag-title="Swift 新并发框架之 async/await">
978               
979             </span>
980          
981          
982
983          
984
985          
986            <div class="post-wordcount">
987              
988                
989                  <span class="post-meta-divider">|</span>
990                
991                <span class="post-meta-item-icon">
992                  <i class="fa fa-file-word-o"></i>
993                </span>
994                
995                  <span class="post-meta-item-text">字数统计</span>
996                
997                <span title="字数统计">
998                  2,550
999                </span>
1000              
1001
1002              
1003                <span class="post-meta-divider">|</span>
1004              
1005
1006              
1007                <span class="post-meta-item-icon">
1008                  <i class="fa fa-clock-o"></i>
1009                </span>
1010                
1011                  <span class="post-meta-item-text">阅读时长</span>
1012                
1013                <span title="阅读时长">
1014                  11
1015                </span>
1016              
1017            </div>
1018          
1019
1020          
1021
1022        </div>
1023      </header>
1024    
1025
1026    
1027    
1028    
1029    <div class="post-body" itemprop="articleBody">
1030
1031      
1032      
1033
1034      
1035        
1036          <p>即使对于经验丰富的开发者来说,写出健壮性、可维护性高的并发代码也是一项具有挑战性的任务,其挑战主要体现在两个方面:</p>
1037<ul>
1038<li><p>传统并发模型是基于异步模式,代码维护性不够友好;</p>
1039</li>
1040<li><p>并发往往意味着 Data Races,这是一类难复现、难排查的常见问题。</p>
1041</li>
1042</ul>
1043<p>Swift 在 5.5 开始引入的新并发框架主要着力解决这 2 个问题。</p>
1044<p>本文是 『 Swift 新并发框架 』系列文章的第一篇,主要介绍 Swift 5.5 引入的 async/await。</p>
1045          <!--noindex-->
1046          <div class="post-button text-center">
1047            <a class="btn" href="/2022/03/18/SwiftModernConcurrency-asyncawait/#more" rel="contents">
1048              阅读全文 &raquo;
1049            </a>
1050          </div>
1051          <!--/noindex-->
1052        
1053      
1054    </div>
1055    
1056    
1057    
1058
1059    
1060
1061    
1062
1063    
1064
1065    <footer class="post-footer">
1066      
1067
1068      
1069
1070      
1071
1072      
1073      
1074        <div class="post-eof"></div>
1075      
1076    </footer>
1077  </div>
1078  
1079  
1080  
1081  </article>
1082
1083
1084    
1085      
1086
1087  
1088
1089  
1090  
1091  
1092
1093  <article class="post post-type-normal" itemscope="" itemtype="http://schema.org/Article">
1094  
1095  
1096  
1097  <div class="post-block">
1098    <link itemprop="mainEntityOfPage" href="http://zxfcumtcs.github.io/2022/02/04/SwiftProtocol2/">
1099
1100    <span hidden itemprop="author" itemscope="" itemtype="http://schema.org/Person">
1101      <meta itemprop="name" content="赵雪峰">
1102      <meta itemprop="description" content="">
1103      <meta itemprop="image" content="/img/author.jpg">
1104    </span>
1105
1106    <span hidden itemprop="publisher" itemscope="" itemtype="http://schema.org/Organization">
1107      <meta itemprop="name" content="雪峰的blog">
1108    </span>
1109
1110    
1111      <header class="post-header">
1112
1113        
1114        
1115          <h1 class="post-title" itemprop="name headline">
1116                
1117                <a class="post-title-link" href="/2022/02/04/SwiftProtocol2/" itemprop="url">Swift Protocol 背后的故事(理论)</a></h1>
1118        
1119
1120        <div class="post-meta">
1121          <span class="post-time">
1122            
1123              <span class="post-meta-item-icon">
1124                <i class="fa fa-calendar-o"></i>
1125              </span>
1126              
1127                <span class="post-meta-item-text">发表于</span>
1128              
1129              <time title="创建于" itemprop="dateCreated datePublished" datetime="2022-02-04T22:16:24+08:00">
1130                2022-02-04
1131              </time>
1132            
1133
1134            
1135
1136            
1137          </span>
1138
1139          
1140
1141          
1142            
1143          
1144
1145          
1146          
1147             <span id="/2022/02/04/SwiftProtocol2/" class="leancloud_visitors" data-flag-title="Swift Protocol 背后的故事(理论)">
1148               
1149             </span>
1150          
1151          
1152
1153          
1154
1155          
1156            <div class="post-wordcount">
1157              
1158                
1159                  <span class="post-meta-divider">|</span>
1160                
1161                <span class="post-meta-item-icon">
1162                  <i class="fa fa-file-word-o"></i>
1163                </span>
1164                
1165                  <span class="post-meta-item-text">字数统计</span>
1166                
1167                <span title="字数统计">
1168                  3,763
1169                </span>
1170              
1171
1172              
1173                <span class="post-meta-divider">|</span>
1174              
1175
1176              
1177                <span class="post-meta-item-icon">
1178                  <i class="fa fa-clock-o"></i>
1179                </span>
1180                
1181                  <span class="post-meta-item-text">阅读时长</span>
1182                
1183                <span title="阅读时长">
1184                  17
1185                </span>
1186              
1187            </div>
1188          
1189
1190          
1191
1192        </div>
1193      </header>
1194    
1195
1196    
1197    
1198    
1199    <div class="post-body" itemprop="articleBody">
1200
1201      
1202      
1203
1204      
1205        
1206          <p>本系列文章将从实践技巧、实现原理以及追踪语言更新等方面对 Swift Protocol 展开深入讨论。主要内容有:</p>
1207<p><a href="https://zxfcumtcs.github.io/2022/02/01/SwiftProtocol1/">Swift Protocol 背后的故事(实践)</a><br>Swift Protocol 背后的故事(理论)<br><a href="https://zxfcumtcs.github.io/2022/06/30/SwiftProtocol3/">Swift Protocol 背后的故事(Swift 5.6/5.7)</a><br>…</p>
1208<p>本文是系列文章第二篇,主要讨论 Swift Protocol 实现机制。</p>
1209<p>内容涉及 Type Metadata、Protocol 内存模型 Existential Container、Generics 的实现原理以及泛型特化等。</p>
1210          <!--noindex-->
1211          <div class="post-button text-center">
1212            <a class="btn" href="/2022/02/04/SwiftProtocol2/#more" rel="contents">
1213              阅读全文 &raquo;
1214            </a>
1215          </div>
1216          <!--/noindex-->
1217        
1218      
1219    </div>
1220    
1221    
1222    
1223
1224    
1225
1226    
1227
1228    
1229
1230    <footer class="post-footer">
1231      
1232
1233      
1234
1235      
1236
1237      
1238      
1239        <div class="post-eof"></div>
1240      
1241    </footer>
1242  </div>
1243  
1244  
1245  
1246  </article>
1247
1248
1249    
1250      
1251
1252  
1253
1254  
1255  
1256  
1257
1258  <article class="post post-type-normal" itemscope="" itemtype="http://schema.org/Article">
1259  
1260  
1261  
1262  <div class="post-block">
1263    <link itemprop="mainEntityOfPage" href="http://zxfcumtcs.github.io/2022/02/01/SwiftProtocol1/">
1264
1265    <span hidden itemprop="author" itemscope="" itemtype="http://schema.org/Person">
1266      <meta itemprop="name" content="赵雪峰">
1267      <meta itemprop="description" content="">
1268      <meta itemprop="image" content="/img/author.jpg">
1269    </span>
1270
1271    <span hidden itemprop="publisher" itemscope="" itemtype="http://schema.org/Organization">
1272      <meta itemprop="name" content="雪峰的blog">
1273    </span>
1274
1275    
1276      <header class="post-header">
1277
1278        
1279        
1280          <h1 class="post-title" itemprop="name headline">
1281                
1282                <a class="post-title-link" href="/2022/02/01/SwiftProtocol1/" itemprop="url">Swift Protocol 背后的故事(实践)</a></h1>
1283        
1284
1285        <div class="post-meta">
1286          <span class="post-time">
1287            
1288              <span class="post-meta-item-icon">
1289                <i class="fa fa-calendar-o"></i>
1290              </span>
1291              
1292                <span class="post-meta-item-text">发表于</span>
1293              
1294              <time title="创建于" itemprop="dateCreated datePublished" datetime="2022-02-01T10:06:08+08:00">
1295                2022-02-01
1296              </time>
1297            
1298
1299            
1300
1301            
1302          </span>
1303
1304          
1305
1306          
1307            
1308          
1309
1310          
1311          
1312             <span id="/2022/02/01/SwiftProtocol1/" class="leancloud_visitors" data-flag-title="Swift Protocol 背后的故事(实践)">
1313               
1314             </span>
1315          
1316          
1317
1318          
1319
1320          
1321            <div class="post-wordcount">
1322              
1323                
1324                  <span class="post-meta-divider">|</span>
1325                
1326                <span class="post-meta-item-icon">
1327                  <i class="fa fa-file-word-o"></i>
1328                </span>
1329                
1330                  <span class="post-meta-item-text">字数统计</span>
1331                
1332                <span title="字数统计">
1333                  2,987
1334                </span>
1335              
1336
1337              
1338                <span class="post-meta-divider">|</span>
1339              
1340
1341              
1342                <span class="post-meta-item-icon">
1343                  <i class="fa fa-clock-o"></i>
1344                </span>
1345                
1346                  <span class="post-meta-item-text">阅读时长</span>
1347                
1348                <span title="阅读时长">
1349                  13
1350                </span>
1351              
1352            </div>
1353          
1354
1355          
1356
1357        </div>
1358      </header>
1359    
1360
1361    
1362    
1363    
1364    <div class="post-body" itemprop="articleBody">
1365
1366      
1367      
1368
1369      
1370        
1371          <p>本系列文章将从实践技巧、实现原理以及追踪语言更新等方面对 Swift Protocol 展开深入讨论。主要内容有:</p>
1372<p>Swift Protocol 背后的故事(实践)<br><a href="https://zxfcumtcs.github.io/2022/02/04/SwiftProtocol2/">Swift Protocol 背后的故事(理论)</a><br><a href="https://zxfcumtcs.github.io/2022/06/30/SwiftProtocol3/">Swift Protocol 背后的故事(Swift 5.6/5.7)</a><br>…</p>
1373<p>本文是系列文章第一篇,主要介绍实践技巧,以一个 Protocol 相关的编译错误为引,通过实例对 Type Erasure、Opaque Types 、Generics 以及 Phantom Types 做了较详细的讨论。它们对于写出更优、更雅的 Swift 代码有一定的帮助。</p>
1374          <!--noindex-->
1375          <div class="post-button text-center">
1376            <a class="btn" href="/2022/02/01/SwiftProtocol1/#more" rel="contents">
1377              阅读全文 &raquo;
1378            </a>
1379          </div>
1380          <!--/noindex-->
1381        
1382      
1383    </div>
1384    
1385    
1386    
1387
1388    
1389
1390    
1391
1392    
1393
1394    <footer class="post-footer">
1395      
1396
1397      
1398
1399      
1400
1401      
1402      
1403        <div class="post-eof"></div>
1404      
1405    </footer>
1406  </div>
1407  
1408  
1409  
1410  </article>
1411
1412
1413    
1414      
1415
1416  
1417
1418  
1419  
1420  
1421
1422  <article class="post post-type-normal" itemscope="" itemtype="http://schema.org/Article">
1423  
1424  
1425  
1426  <div class="post-block">
1427    <link itemprop="mainEntityOfPage" href="http://zxfcumtcs.github.io/2021/08/28/deepinto-flutter-custom-renderobjectwidget/">
1428
1429    <span hidden itemprop="author" itemscope="" itemtype="http://schema.org/Person">
1430      <meta itemprop="name" content="赵雪峰">
1431      <meta itemprop="description" content="">
1432      <meta itemprop="image" content="/img/author.jpg">
1433    </span>
1434
1435    <span hidden itemprop="publisher" itemscope="" itemtype="http://schema.org/Organization">
1436      <meta itemprop="name" content="雪峰的blog">
1437    </span>
1438
1439    
1440      <header class="post-header">
1441
1442        
1443        
1444          <h1 class="post-title" itemprop="name headline">
1445                
1446                <a class="post-title-link" href="/2021/08/28/deepinto-flutter-custom-renderobjectwidget/" itemprop="url">深入浅出 Flutter Framework 之自定义渲染型 Widget</a></h1>
1447        
1448
1449        <div class="post-meta">
1450          <span class="post-time">
1451            
1452              <span class="post-meta-item-icon">
1453                <i class="fa fa-calendar-o"></i>
1454              </span>
1455              
1456                <span class="post-meta-item-text">发表于</span>
1457              
1458              <time title="创建于" itemprop="dateCreated datePublished" datetime="2021-08-28T11:07:58+08:00">
1459                2021-08-28
1460              </time>
1461            
1462
1463            
1464
1465            
1466          </span>
1467
1468          
1469
1470          
1471            
1472          
1473
1474          
1475          
1476             <span id="/2021/08/28/deepinto-flutter-custom-renderobjectwidget/" class="leancloud_visitors" data-flag-title="深入浅出 Flutter Framework 之自定义渲染型 Widget">
1477               
1478             </span>
1479          
1480          
1481
1482          
1483
1484          
1485            <div class="post-wordcount">
1486              
1487                
1488                  <span class="post-meta-divider">|</span>
1489                
1490                <span class="post-meta-item-icon">
1491                  <i class="fa fa-file-word-o"></i>
1492                </span>
1493                
1494                  <span class="post-meta-item-text">字数统计</span>
1495                
1496                <span title="字数统计">
1497                  3,455
1498                </span>
1499              
1500
1501              
1502                <span class="post-meta-divider">|</span>
1503              
1504
1505              
1506                <span class="post-meta-item-icon">
1507                  <i class="fa fa-clock-o"></i>
1508                </span>
1509                
1510                  <span class="post-meta-item-text">阅读时长</span>
1511                
1512                <span title="阅读时长">
1513                  16
1514                </span>
1515              
1516            </div>
1517          
1518
1519          
1520
1521        </div>
1522      </header>
1523    
1524
1525    
1526    
1527    
1528    <div class="post-body" itemprop="articleBody">
1529
1530      
1531      
1532
1533      
1534        
1535          <p>本文是『 深入浅出 Flutter Framework 』系列文章的第八篇,也是收官之作。通过自定义渲染型 Widget,我们一步步地实现了一个评分组件。</p>
1536          <!--noindex-->
1537          <div class="post-button text-center">
1538            <a class="btn" href="/2021/08/28/deepinto-flutter-custom-renderobjectwidget/#more" rel="contents">
1539              阅读全文 &raquo;
1540            </a>
1541          </div>
1542          <!--/noindex-->
1543        
1544      
1545    </div>
1546    
1547    
1548    
1549
1550    
1551
1552    
1553
1554    
1555
1556    <footer class="post-footer">
1557      
1558
1559      
1560
1561      
1562
1563      
1564      
1565        <div class="post-eof"></div>
1566      
1567    </footer>
1568  </div>
1569  
1570  
1571  
1572  </article>
1573
1574
1575    
1576      
1577
1578  
1579
1580  
1581  
1582  
1583
1584  <article class="post post-type-normal" itemscope="" itemtype="http://schema.org/Article">
1585  
1586  
1587  
1588  <div class="post-block">
1589    <link itemprop="mainEntityOfPage" href="http://zxfcumtcs.github.io/2021/03/27/deepinto-flutter-renderobject/">
1590
1591    <span hidden itemprop="author" itemscope="" itemtype="http://schema.org/Person">
1592      <meta itemprop="name" content="赵雪峰">
1593      <meta itemprop="description" content="">
1594      <meta itemprop="image" content="/img/author.jpg">
1595    </span>
1596
1597    <span hidden itemprop="publisher" itemscope="" itemtype="http://schema.org/Organization">
1598      <meta itemprop="name" content="雪峰的blog">
1599    </span>
1600
1601    
1602      <header class="post-header">
1603
1604        
1605        
1606          <h1 class="post-title" itemprop="name headline">
1607                
1608                <a class="post-title-link" href="/2021/03/27/deepinto-flutter-renderobject/" itemprop="url">深入浅出 Flutter Framework 之 RenderObject</a></h1>
1609        
1610
1611        <div class="post-meta">
1612          <span class="post-time">
1613            
1614              <span class="post-meta-item-icon">
1615                <i class="fa fa-calendar-o"></i>
1616              </span>
1617              
1618                <span class="post-meta-item-text">发表于</span>
1619              
1620              <time title="创建于" itemprop="dateCreated datePublished" datetime="2021-03-27T16:14:34+08:00">
1621                2021-03-27
1622              </time>
1623            
1624
1625            
1626
1627            
1628          </span>
1629
1630          
1631
1632          
1633            
1634          
1635
1636          
1637          
1638             <span id="/2021/03/27/deepinto-flutter-renderobject/" class="leancloud_visitors" data-flag-title="深入浅出 Flutter Framework 之 RenderObject">
1639               
1640             </span>
1641          
1642          
1643
1644          
1645
1646          
1647            <div class="post-wordcount">
1648              
1649                
1650                  <span class="post-meta-divider">|</span>
1651                
1652                <span class="post-meta-item-icon">
1653                  <i class="fa fa-file-word-o"></i>
1654                </span>
1655                
1656                  <span class="post-meta-item-text">字数统计</span>
1657                
1658                <span title="字数统计">
1659                  4,116
1660                </span>
1661              
1662
1663              
1664                <span class="post-meta-divider">|</span>
1665              
1666
1667              
1668                <span class="post-meta-item-icon">
1669                  <i class="fa fa-clock-o"></i>
1670                </span>
1671                
1672                  <span class="post-meta-item-text">阅读时长</span>
1673                
1674                <span title="阅读时长">
1675                  18
1676                </span>
1677              
1678            </div>
1679          
1680
1681          
1682
1683        </div>
1684      </header>
1685    
1686
1687    
1688    
1689    
1690    <div class="post-body" itemprop="articleBody">
1691
1692      
1693      
1694
1695      
1696        
1697          <p>本文是『 深入浅出 Flutter Framework 』系列文章的第七篇。</p>
1698          <!--noindex-->
1699          <div class="post-button text-center">
1700            <a class="btn" href="/2021/03/27/deepinto-flutter-renderobject/#more" rel="contents">
1701              阅读全文 &raquo;
1702            </a>
1703          </div>
1704          <!--/noindex-->
1705        
1706      
1707    </div>
1708    
1709    
1710    
1711
1712    
1713
1714    
1715
1716    
1717
1718    <footer class="post-footer">
1719      
1720
1721      
1722
1723      
1724
1725      
1726      
1727        <div class="post-eof"></div>
1728      
1729    </footer>
1730  </div>
1731  
1732  
1733  
1734  </article>
1735
1736
1737    
1738      
1739
1740  
1741
1742  
1743  
1744  
1745
1746  <article class="post post-type-normal" itemscope="" itemtype="http://schema.org/Article">
1747  
1748  
1749  
1750  <div class="post-block">
1751    <link itemprop="mainEntityOfPage" href="http://zxfcumtcs.github.io/2021/01/02/HighQualityCode/">
1752
1753    <span hidden itemprop="author" itemscope="" itemtype="http://schema.org/Person">
1754      <meta itemprop="name" content="赵雪峰">
1755      <meta itemprop="description" content="">
1756      <meta itemprop="image" content="/img/author.jpg">
1757    </span>
1758
1759    <span hidden itemprop="publisher" itemscope="" itemtype="http://schema.org/Organization">
1760      <meta itemprop="name" content="雪峰的blog">
1761    </span>
1762
1763    
1764      <header class="post-header">
1765
1766        
1767        
1768          <h1 class="post-title" itemprop="name headline">
1769                
1770                <a class="post-title-link" href="/2021/01/02/HighQualityCode/" itemprop="url">『码』出高质量</a></h1>
1771        
1772
1773        <div class="post-meta">
1774          <span class="post-time">
1775            
1776              <span class="post-meta-item-icon">
1777                <i class="fa fa-calendar-o"></i>
1778              </span>
1779              
1780                <span class="post-meta-item-text">发表于</span>
1781              
1782              <time title="创建于" itemprop="dateCreated datePublished" datetime="2021-01-02T11:36:56+08:00">
1783                2021-01-02
1784              </time>
1785            
1786
1787            
1788
1789            
1790          </span>
1791
1792          
1793
1794          
1795            
1796          
1797
1798          
1799          
1800             <span id="/2021/01/02/HighQualityCode/" class="leancloud_visitors" data-flag-title="『码』出高质量">
1801               
1802             </span>
1803          
1804          
1805
1806          
1807
1808          
1809            <div class="post-wordcount">
1810              
1811                
1812                  <span class="post-meta-divider">|</span>
1813                
1814                <span class="post-meta-item-icon">
1815                  <i class="fa fa-file-word-o"></i>
1816                </span>
1817                
1818                  <span class="post-meta-item-text">字数统计</span>
1819                
1820                <span title="字数统计">
1821                  4,123
1822                </span>
1823              
1824
1825              
1826                <span class="post-meta-divider">|</span>
1827              
1828
1829              
1830                <span class="post-meta-item-icon">
1831                  <i class="fa fa-clock-o"></i>
1832                </span>
1833                
1834                  <span class="post-meta-item-text">阅读时长</span>
1835                
1836                <span title="阅读时长">
1837                  14
1838                </span>
1839              
1840            </div>
1841          
1842
1843          
1844
1845        </div>
1846      </header>
1847    
1848
1849    
1850    
1851    
1852    <div class="post-body" itemprop="articleBody">
1853
1854      
1855      
1856
1857      
1858        
1859          <p>本文从易理解、可维护、可扩展三个维度简要介绍了对高质量代码的理解。<br>同时,提出了一种新的 GUI 模式:MVVS。</p>
1860          <!--noindex-->
1861          <div class="post-button text-center">
1862            <a class="btn" href="/2021/01/02/HighQualityCode/#more" rel="contents">
1863              阅读全文 &raquo;
1864            </a>
1865          </div>
1866          <!--/noindex-->
1867        
1868      
1869    </div>
1870    
1871    
1872    
1873
1874    
1875
1876    
1877
1878    
1879
1880    <footer class="post-footer">
1881      
1882
1883      
1884
1885      
1886
1887      
1888      
1889        <div class="post-eof"></div>
1890      
1891    </footer>
1892  </div>
1893  
1894  
1895  
1896  </article>
1897
1898
1899    
1900  </section>
1901
1902  
1903  <nav class="pagination">
1904    <span class="page-number current">1</span><a class="page-number" href="/page/2/">2</a><span class="space">&hellip;</span><a class="page-number" href="/page/6/">6</a><a class="extend next" rel="next" href="/page/2/"><i class="fa fa-angle-right"></i></a>
1905  </nav>
1906
1907
1908
1909          </div>
1910          
1911
1912
1913          
1914
1915        </div>
1916        
1917          
1918  
1919  <div class="sidebar-toggle">
1920    <div class="sidebar-toggle-line-wrap">
1921      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
1922      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
1923      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
1924    </div>
1925  </div>
1926
1927  <aside id="sidebar" class="sidebar">
1928    
1929    <div class="sidebar-inner">
1930
1931      
1932
1933      
1934
1935      <section class="site-overview sidebar-panel sidebar-panel-active">
1936        <div class="site-author motion-element" itemprop="author" itemscope="" itemtype="http://schema.org/Person">
1937          <img class="site-author-image" itemprop="image" src="/img/author.jpg" alt="赵雪峰">
1938          <p class="site-author-name" itemprop="name">赵雪峰</p>
1939           
1940              <p class="site-description motion-element" itemprop="description">记录技术点滴</p>
1941          
1942        </div>
1943        <nav class="site-state motion-element">
1944
1945          
1946            <div class="site-state-item site-state-posts">
1947              <a href="/archives/">
1948                <span class="site-state-item-count">59</span>
1949                <span class="site-state-item-name">日志</span>
1950              </a>
1951            </div>
1952          
1953
1954          
1955
1956          
1957            
1958            
1959            <div class="site-state-item site-state-tags">
1960              <a href="/tags/index.html">
1961                <span class="site-state-item-count">25</span>
1962                <span class="site-state-item-name">标签</span>
1963              </a>
1964            </div>
1965          
1966
1967        </nav>
1968
1969        
1970          <div class="feed-link motion-element">
1971            <a href="/atom.xml" rel="alternate">
1972              <i class="fa fa-rss"></i>
1973              RSS
1974            </a>
1975          </div>
1976        
1977
1978        <div class="links-of-author motion-element">
1979          
1980            
1981              <span class="links-of-author-item">
1982                <a href="https://github.com/zxfcumtcs" target="_blank" title="GitHub">
1983                  
1984                    <i class="fa fa-fw fa-github"></i>
1985                  
1986                    
1987                      GitHub
1988                    
1989                </a>
1990              </span>
1991            
1992              <span class="links-of-author-item">
1993                <a href="[email protected]" target="_blank" title="E-Mail">
1994                  
1995                    <i class="fa fa-fw fa-envelope"></i>
1996                  
1997                    
1998                      E-Mail
1999                    
2000                </a>
2001              </span>
2002            
2003          
2004        </div>
2005
2006        
2007        
2008
2009        
2010        
2011
2012        
2013
2014
2015      </section>
2016
2017      
2018
2019      
2020
2021    </div>
2022  </aside>
2023
2024
2025        
2026      </div>
2027    </main>
2028
2029    <footer id="footer" class="footer">
2030      <div class="footer-inner">
2031        <div class="copyright">
2032  
2033  &copy; 
2034  <span itemprop="copyrightYear">2022</span>
2035  <span class="with-love">
2036    <i class="fa fa-heart"></i>
2037  </span>
2038  <span class="author" itemprop="copyrightHolder">赵雪峰</span>
2039</div>
2040
2041
2042<div class="powered-by">
2043  由 <a class="theme-link" href="https://hexo.io">Hexo</a> 强力驱动
2044</div>
2045
2046<div class="theme-info">
2047  主题 -
2048  <a class="theme-link" href="https://github.com/iissnan/hexo-theme-next">
2049    NexT.Pisces
2050  </a>
2051</div>
2052
2053
2054        
2055
2056        
2057      </div>
2058    </footer>
2059
2060    
2061      <div class="back-to-top">
2062        <i class="fa fa-arrow-up"></i>
2063        
2064      </div>
2065    
2066
2067  </div>
2068
2069  
2070
2071<script type="text/javascript">
2072  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
2073    window.Promise = null;
2074  }
2075</script>
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085  
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098  
2099  
2099<script type="text/javascript" src="/lib/jquery/index.js?v=2.1.3"></script>
2099
2100
2101  
2102  
2102<script type="text/javascript" src="/lib/fastclick/lib/fastclick.min.js?v=1.0.6"></script>
2102
2103
2104  
2105  
2105<script type="text/javascript" src="/lib/jquery_lazyload/jquery.lazyload.js?v=1.9.7"></script>
2105
2106
2107  
2108  
2108<script type="text/javascript" src="/lib/velocity/velocity.min.js?v=1.2.1"></script>
2108
2109
2110  
2111  
2111<script type="text/javascript" src="/lib/velocity/velocity.ui.min.js?v=1.2.1"></script>
2111
2112
2113  
2114  
2114<script type="text/javascript" src="/lib/fancybox/source/jquery.fancybox.pack.js?v=2.1.5"></script>
2114
2115
2116
2117  
2118
2119
2120  
2120<script type="text/javascript" src="/js/src/utils.js?v=5.1.2"></script>
2120
2121
2122  
2122<script type="text/javascript" src="/js/src/motion.js?v=5.1.2"></script>
2122
2123
2124
2125
2126  
2127  
2128
2129
2130  
2130<script type="text/javascript" src="/js/src/affix.js?v=5.1.2"></script>
2130
2131
2132  
2132<script type="text/javascript" src="/js/src/schemes/pisces.js?v=5.1.2"></script>
2132
2133
2134
2135
2136  
2137    
2137<script type="text/javascript" src="/js/src/scrollspy.js?v=5.1.2"></script>
vendor: 1 bytes, line 2137
2137
2138<script type="text/javascript" src="/js/src/post-details.js?v=5.1.2"></script>
2138
2139
2140  
2141
2142  
2143
2144
2145  
2145<script type="text/javascript" src="/js/src/bootstrap.js?v=5.1.2"></script>
2145
2146
2147
2148
2149  
2150
2151
2152  
2153
2154
2155
2156
2157	
2158
2159
2160
2161
2162
2163  
2164
2165
2166
2167
2168
2169  
2170
2171
2172
2173
2174
2175
2176
2177
2178  
2179
2180
2181
2182
2183
2184  
2185
2186  
2187  
2187<script src="https://cdn1.lncld.net/static/js/av-core-mini-0.6.4.js"></script>
2187
2188  
2188<script>AV.initialize("bdhTYmQjzWTTLjKn66BIYj5E-gzGzoHsz", "6Lc7jOOONeLP6mUTb7x5NzVf");</script>
2188
2189  
2189<script>
2190    function showTime(Counter) {
2191      var query = new AV.Query(Counter);
2192      var entries = [];
2193      var $visitors = $(".leancloud_visitors");
2194
2195      $visitors.each(function () {
2196        entries.push( $(this).attr("id").trim() );
2197      });
2198
2199      query.containedIn('url', entries);
2200      query.find()
2201        .done(function (results) {
2202          var COUNT_CONTAINER_REF = '.leancloud-visitors-count';
2203
2204          if (results.length === 0) {
2205            $visitors.find(COUNT_CONTAINER_REF).text(0);
2206            return;
2207          }
2208
2209          for (var i = 0; i < results.length; i++) {
2210            var item = results[i];
2211            var url = item.get('url');
2212            var time = item.get('time');
2213            var element = document.getElementById(url);
2214
2215            $(element).find(COUNT_CONTAINER_REF).text(time);
2216          }
2217          for(var i = 0; i < entries.length; i++) {
2218            var url = entries[i];
2219            var element = document.getElementById(url);
2220            var countSpan = $(element).find(COUNT_CONTAINER_REF);
2221            if( countSpan.text() == '') {
2222              countSpan.text(0);
2223            }
2224          }
2225        })
2226        .fail(function (object, error) {
2227          console.log("Error: " + error.code + " " + error.message);
2228        });
2229    }
2230
2231    function addCount(Counter) {
2232      var $visitors = $(".leancloud_visitors");
2233      var url = $visitors.attr('id').trim();
2234      var title = $visitors.attr('data-flag-title').trim();
2235      var query = new AV.Query(Counter);
2236
2237      query.equalTo("url", url);
2238      query.find({
2239        success: function(results) {
2240          if (results.length > 0) {
2241            var counter = results[0];
2242            counter.fetchWhenSave(true);
2243            counter.increment("time");
2244            counter.save(null, {
2245              success: function(counter) {
2246                var $element = $(document.getElementById(url));
2247                $element.find('.leancloud-visitors-count').text(counter.get('time'));
2248              },
2249              error: function(counter, error) {
2250                console.log('Failed to save Visitor num, with error message: ' + error.message);
2251              }
2252            });
2253          } else {
2254            var newcounter = new Counter();
2255            /* Set ACL */
2256            var acl = new AV.ACL();
2257            acl.setPublicReadAccess(true);
2258            acl.setPublicWriteAccess(true);
2259            newcounter.setACL(acl);
2260            /* End Set ACL */
2261            newcounter.set("title", title);
2262            newcounter.set("url", url);
2263            newcounter.set("time", 1);
2264            newcounter.save(null, {
2265              success: function(newcounter) {
2266                var $element = $(document.getElementById(url));
2267                $element.find('.leancloud-visitors-count').text(newcounter.get('time'));
2268              },
2269              error: function(newcounter, error) {
2270                console.log('Failed to create');
2271              }
2272            });
2273          }
2274        },
2275        error: function(error) {
2276          console.log('Error:' + error.code + " " + error.message);
2277        }
2278      });
2279    }
2280
2281    $(function() {
2282      var Counter = AV.Object.extend("Counter");
2283      if ($('.leancloud_visitors').length == 1) {
2284        addCount(Counter);
2285      } else if ($('.post-title-link').length > 1) {
2286        showTime(Counter);
2287      }
2288    });
2289  </script>
2289
2290
2291
2292
2293  
2294
2295  
2296
2297  
2298
2299  
2300
2301  
2302
2303</body>
2304</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.