1<!DOCTYPE html> 2<html lang="en"> 3 4<head> 5 <meta charset="utf-8"> 6 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 7 <meta name="google-site-verification" content="xBT4GhYoi5qRD5tr338pgPM5OWHHIDR6mNg1a3euekI" /> 8 <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"> 9 <meta name="description" content="å ³äºç¨åºä¸è®¾è®¡ãé»å®¢ä¸ç»å®¶ | é»çï¼Web & Mobile Loverï¼Software Engineerï¼UX Designer | è¿éæ¯ @Huxé»ç ç个人å客ï¼ä¸ä½ ä¸èµ·åç°æ´å¤§çä¸çã"> 10 <meta name="keywords" content="P36348, @P36348, å客, 个人ç½ç«, äºèç½, Web, JavaScript, iOS, Swift"> 11 <meta name="theme-color" content="#000000"> 12 13 <!-- Open Graph --> 14 <meta property="og:title" content="Archive - P36348çå客 | P36348's Blog"> 15 16 <meta property="og:type" content="website"> 17 <meta property="og:description" content="keep hungry keep foolish"> 18 19 <meta property="og:image" content="https://p36348.github.io//img/avatar-hux-ny.jpg"> 20 <meta property="og:url" content="https://p36348.github.io//archive/"> 21 <meta property="og:site_name" content="P36348çå客 | P36348's Blog"> 22 23 <title>Archive - P36348çå客 | P36348's Blog</title> 24 25 <!-- Web App Manifest --> 26 <link rel="manifest" href="/pwa/manifest.json"> 27 28 <!-- Favicon --> 29 <link rel="shortcut icon" href="/img/favicon.ico"> 30 31 <!-- Canonical URL --> 32 <link rel="canonical" href="https://p36348.github.io//archive/"> 33 34 <!-- Bootstrap Core CSS --> 35 <link rel="stylesheet" href="/css/bootstrap.min.css"> 36 37 <!-- Custom CSS --> 38 <link rel="stylesheet" href="/css/hux-blog.min.css"> 39 40 <!-- Custom Fonts --> 41 <!-- <link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet" type="text/css"> --> 42 <!-- Hux change font-awesome CDN to qiniu --> 43 <link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" type="text/css"> 44 45 46 <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> 47 <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> 48 <!--[if lt IE 9]> 49
49<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
49 50
50<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
50 51 <![endif]--> 52 53 <!-- ga & ba script hoook --> 54
54<script></script>
54 55</head> 56 57 58<!-- hack iOS CSS :active style --> 59<body ontouchstart=""> 60 61 <!-- Navigation --> 62 63<nav class="navbar navbar-default navbar-custom navbar-fixed-top"> 64 65 <div class="container-fluid"> 66 <!-- Brand and toggle get grouped for better mobile display --> 67 <div class="navbar-header page-scroll"> 68 <button type="button" class="navbar-toggle"> 69 <span class="sr-only">Toggle navigation</span> 70 <span class="icon-bar"></span> 71 <span class="icon-bar"></span> 72 <span class="icon-bar"></span> 73 </button> 74 <a class="navbar-brand" href="/">P36348's Blog</a> 75 </div> 76 77 <!-- Collect the nav links, forms, and other content for toggling --> 78 <div id="huxblog_navbar"> 79 <div class="navbar-collapse"> 80 <ul class="nav navbar-nav navbar-right"> 81 <li> 82 <a href="/">Home</a> 83 </li> 84 85 86 87 88 <li> 89 <a href="/about/">About</a> 90 </li> 91 92 93 94 <li> 95 <a href="/archive/">Archive</a> 96 </li> 97 98 99 100 101 102 <li> 103 <a href="/portfolio/">Portfolio</a> 104 </li> 105 106 107 108 109 110 111 112 113 </ul> 114 </div> 115 </div> 116 <!-- /.navbar-collapse --> 117 </div> 118 <!-- /.container --> 119</nav>
120<script> 121 // Drop Bootstarp low-performance Navbar 122 // Use customize navbar with high-quality material design animation 123 // in high-perf jank-free CSS3 implementation 124 var $body = document.body; 125 var $toggle = document.querySelector('.navbar-toggle'); 126 var $navbar = document.querySelector('#huxblog_navbar'); 127 var $collapse = document.querySelector('.navbar-collapse'); 128 129 var __HuxNav__ = { 130 close: function(){ 131 $navbar.className = " "; 132 // wait until animation end. 133 setTimeout(function(){ 134 // prevent frequently toggle 135 if($navbar.className.indexOf('in') < 0) { 136 $collapse.style.height = "0px" 137 } 138 },400) 139 }, 140 open: function(){ 141 $collapse.style.height = "auto" 142 $navbar.className += " in"; 143 } 144 } 145 146 // Bind Event 147 $toggle.addEventListener('click', function(e){ 148 if ($navbar.className.indexOf('in') > 0) { 149 __HuxNav__.close() 150 }else{ 151 __HuxNav__.open() 152 } 153 }) 154 155 /** 156 * Since Fastclick is used to delegate 'touchstart' globally 157 * to hack 300ms delay in iOS by performing a fake 'click', 158 * Using 'e.stopPropagation' to stop 'touchstart' event from 159 * $toggle/$collapse will break global delegation. 160 * 161 * Instead, we use a 'e.target' filter to prevent handler 162 * added to document close HuxNav. 163 * 164 * Also, we use 'click' instead of 'touchstart' as compromise 165 */ 166 document.addEventListener('click', function(e){ 167 if(e.target == $toggle) return; 168 if(e.target.className == 'icon-bar') return; 169 __HuxNav__.close(); 170 }) 171</script>
171 172 173 174 <!-- 175Credits: this page shamelessly borrowed a lot from: 176https://github.com/kitian616/jekyll-TeXt-theme 177--> 178<!-- Page Header --> 179 180 181 182 183 184 185 186<header class="intro-header" style="background-image: url('/img/tag-bg.jpg')"> 187 <div class="container"> 188 <div class="row"> 189 <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> 190 191 <div class="site-heading" id="tag-heading"> 192 193 <h1>Archive</h1> 194 <span class="subheading">keep hungry keep foolish</span> 195 </div> 196 </div> 197 </div> 198 </div> 199</header> 200 201 202<!-- Main Content --> 203<div class="container"> 204 <div class="row"> 205 <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> 206 <!-- Tags (as filter) --> 207 <div id='tag_cloud' class="tags tags-sup js-tags"> 208 <a class="tag-button--all" data-encode=""> 209 Show All 210 <sup>6</sup> 211 </a> 212 213 214 215 216 </a> 217 218 <a data-sort="0000" 219 data-encode="Swift" 220 class="tag-button" 221 title="Swift" rel="6"> 222 Swift 223 <sup>6</sup> 224 </a> 225 226 <a data-sort="0000" 227 data-encode="iOS" 228 class="tag-button" 229 title="iOS" rel="6"> 230 iOS 231 <sup>6</sup> 232 </a> 233 234 <a data-sort="0002" 235 data-encode="RxSwift" 236 class="tag-button" 237 title="RxSwift" rel="4"> 238 RxSwift 239 <sup>4</sup> 240 </a> 241 242 <a data-sort="0004" 243 data-encode="%E5%93%8D%E5%BA%94%E5%BC%8F%E7%BC%96%E7%A8%8B" 244 class="tag-button" 245 title="ååºå¼ç¼ç¨" rel="2"> 246 ååºå¼ç¼ç¨ 247 <sup>2</sup> 248 </a> 249 250 <a data-sort="0005" 251 data-encode="%E6%95%B0%E6%8D%AE%E6%8C%81%E4%B9%85%E5%8C%96" 252 class="tag-button" 253 title="æ°æ®æä¹ å" rel="1"> 254 æ°æ®æä¹ å 255 <sup>1</sup> 256 </a> 257 258 <a data-sort="0005" 259 data-encode="GCD" 260 class="tag-button" 261 title="GCD" rel="1"> 262 GCD 263 <sup>1</sup> 264 </a> 265 266 <a data-sort="0005" 267 data-encode="Generic" 268 class="tag-button" 269 title="Generic" rel="1"> 270 Generic 271 <sup>1</sup> 272 </a> 273 274 <a data-sort="0005" 275 data-encode="MVVM" 276 class="tag-button" 277 title="MVVM" rel="1"> 278 MVVM 279 <sup>1</sup> 280 </a> 281 282 <a data-sort="0005" 283 data-encode="Objective-C" 284 class="tag-button" 285 title="Objective-C" rel="1">
286 Objective-C 287 <sup>1</sup> 288 </a> 289 290 <a data-sort="0005" 291 data-encode="Reactive+Programing" 292 class="tag-button" 293 title="Reactive Programing" rel="1"> 294 Reactive Programing 295 <sup>1</sup> 296 </a> 297 298 <a data-sort="0005" 299 data-encode="ReactiveX" 300 class="tag-button" 301 title="ReactiveX" rel="1"> 302 ReactiveX 303 <sup>1</sup> 304 </a> 305 306 <a data-sort="0005" 307 data-encode="Realm" 308 class="tag-button" 309 title="Realm" rel="1"> 310 Realm 311 <sup>1</sup> 312 </a> 313 314 <a data-sort="0005" 315 data-encode="RxCocoa" 316 class="tag-button" 317 title="RxCocoa" rel="1"> 318 RxCocoa 319 <sup>1</sup> 320 </a> 321 322 <a data-sort="0005" 323 data-encode="UIKit" 324 class="tag-button" 325 title="UIKit" rel="1"> 326 UIKit 327 <sup>1</sup> 328 </a> 329 330 <a data-sort="0005" 331 data-encode="UserDefault" 332 class="tag-button" 333 title="UserDefault" rel="1"> 334 UserDefault 335 <sup>1</sup> 336 </a> 337 338 <a data-sort="0005" 339 data-encode="database" 340 class="tag-button" 341 title="database" rel="1"> 342 database 343 <sup>1</sup> 344 345 </div> 346 347 <!-- Article List --> 348 <div class="mini-post-list js-result d-none"><section> 349 <span class="fa listing-seperator"> 350 <span class="tag-text">2019</span> 351 </span><div class="post-preview item" data-tags="iOS,Objective-C,Swift,RxSwift,GCD"> 352 <a href="/2019/03/26/iOS-utils/"> 353 <h2 class="post-title"> 354 iOSç¢çåç¥è¯ç¹æ±æ»(æç»æ´æ°) 355 </h2> 356 357 </a> 358 <hr> 359 </div> 360 <div class="post-preview item" data-tags="iOS,RxSwift,RxCocoa,UIKit,Swift,%E5%93%8D%E5%BA%94%E5%BC%8F%E7%BC%96%E7%A8%8B"> 361 <a href="/2019/02/19/rxcocoa-uikit-proxy/"> 362 <h2 class="post-title"> 363 RxCocoaä¸å¯¹UIKitçDelegateçå¤ç 364 </h2> 365 366 <h3 class="post-subtitle"> 367 è®°ä¸æ¬¡RxSwift/RxCocoaæºç é 读 368 </h3> 369 370 </a> 371 <hr> 372 </div> 373 </section><section> 374 <span class="fa listing-seperator"> 375 <span class="tag-text">2018</span> 376 </span><div class="post-preview item" data-tags="iOS,Swift,Generic,UserDefault,%E6%95%B0%E6%8D%AE%E6%8C%81%E4%B9%85%E5%8C%96"> 377 <a href="/2018/12/13/genericity-userdefault/"> 378 <h2 class="post-title"> 379 Swiftæ³ååºç¨, UserDefault 380 </h2> 381 382 </a> 383 <hr> 384 </div> 385 <div class="post-preview item" data-tags="iOS,Swift,database,Realm"> 386 <a href="/2018/12/04/realm/"> 387 <h2 class="post-title"> 388 iOSæ°æ®æä¹ åè§£å³æ¹æ¡Realm(å¾ å®æ) 389 </h2> 390 391 </a> 392 <hr> 393 </div> 394 <div class="post-preview item" data-tags="iOS,RxSwift,Swift,ReactiveX,%E5%93%8D%E5%BA%94%E5%BC%8F%E7%BC%96%E7%A8%8B,MVVM"> 395 <a href="/2018/12/01/rxswift-in-mvvm/"> 396 <h2 class="post-title"> 397 RxSwiftåºç¨MVVM 398 </h2> 399 400 <h3 class="post-subtitle"> 401 工使é´é¡¹ç®ä¸RxSwiftçåºç¨ 402 </h3> 403 404 </a> 405 <hr> 406 </div> 407 <div class="post-preview item" data-tags="iOS,RxSwift,Swift,Reactive+Programing"> 408 <a href="/2018/11/27/rxswift-async-programing/"> 409 <h2 class="post-title"> 410 RxSwift, 弿¥æä½ç»åå¤ç 411 </h2> 412 413 <h3 class="post-subtitle"> 414 工使é´é¡¹ç®ä¸RxSwiftçåºç¨ 415 </h3> 416 417 </a> 418 <hr> 419 </div> 420 421 </div> 422 </div> 423</div> 424 425 426 <!-- Footer --> 427<footer> 428 <div class="container"> 429 <div class="row"> 430 <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> 431 <!-- SNS Link --> 432 433 434 435<ul class="list-inline text-center"> 436 437 438 439 440 441 442 443 444 <li> 445 <a target="_blank" href="https://github.com/P36348"> 446 <span class="fa-stack fa-lg"> 447 <i class="fa fa-circle fa-stack-2x"></i> 448 <i class="fa fa-github fa-stack-1x fa-inverse"></i> 449 </span> 450 </a> 451 </li> 452 453 454</ul> 455 456 <p class="copyright text-muted">
457 Copyright © P36348's Blog 2019 458 <br> 459 Powered by <a href="http://huangxuan.me">Hux Blog</a> | 460 <iframe 461 style="margin-left: 2px; margin-bottom:-5px;" 462 frameborder="0" scrolling="0" width="100px" height="20px" 463 src="https://ghbtns.com/github-btn.html?user=huxpro&repo=huxpro.github.io&type=star&count=true" > 464 </iframe> 465 </p> 466 </div> 467 </div> 468 </div> 469</footer> 470 471<!-- jQuery -->
472<script src="/js/jquery.min.js "></script>
472 473 474<!-- Bootstrap Core JavaScript --> 475<!-- Currently, only navbar scroll-down effect at desktop still depends on this -->
476<script src="/js/bootstrap.min.js "></script>
476 477 478<!-- Custom Theme JavaScript -->
479<script src="/js/hux-blog.min.js "></script>
479 480 481<!-- Service Worker --> 482
483<script src="/js/snackbar.js "></script>
vendor: 1 bytes, line 483
483
484<script src="/js/sw-registration.js "></script>
484 485 486 487<!-- async load function -->
488<script> 489 function async(u, c) { 490 var d = document, t = 'script', 491 o = d.createElement(t), 492 s = d.getElementsByTagName(t)[0]; 493 o.src = u; 494 if (c) { o.addEventListener('load', function (e) { c(null, e); }, false); } 495 s.parentNode.insertBefore(o, s); 496 } 497</script>
497 498 499<!-- 500 Because of the native support for backtick-style fenced code blocks 501 right within the Markdown is landed in Github Pages, 502 From V1.6, There is no need for Highlight.js, 503 so Huxblog drops it officially. 504 505 - https://github.com/blog/2100-github-pages-now-faster-and-simpler-with-jekyll-3-0 506 - https://help.github.com/articles/creating-and-highlighting-code-blocks/ 507 - https://github.com/jneen/rouge/wiki/list-of-supported-languages-and-lexers 508--> 509<!-- 510
510<script> 511 async("http://cdn.bootcss.com/highlight.js/8.6/highlight.min.js", function(){ 512 hljs.initHighlightingOnLoad(); 513 }) 514 </script>
514 515 <link href="http://cdn.bootcss.com/highlight.js/8.6/styles/github.min.css" rel="stylesheet"> 516--> 517 518 519 520 521<!-- jquery.tagcloud.js -->
522<script> 523 async('/js/jquery.tagcloud.js',function(){ 524 $.fn.tagcloud.defaults = { 525 //size: {start: 1, end: 1, unit: 'em'}, 526 color: {start: '#bbbbee', end: '#2f93b4'}, 527 }; 528 $('#tag_cloud a').tagcloud(); 529 }) 530</script>
vendor: 1 bytes, line 530
530
531<script src='/js/archive.js '></script>
531 532 533 534<!--fastClick.js -->
535<script> 536 async("//cdnjs.cloudflare.com/ajax/libs/fastclick/1.0.6/fastclick.min.js", function(){ 537 var $nav = document.querySelector("nav"); 538 if($nav) FastClick.attach($nav); 539 }) 540</script>
540 541 542 543<!-- Google Analytics --> 544
545<script> 546 // dynamic User by Hux 547 var _gaId = 'UA-49627206-1'; 548 var _gaDomain = 'auto'; 549 550 // Originial 551 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 552 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 553 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 554 })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 555 556 ga('create', _gaId, _gaDomain); 557 ga('send', 'pageview'); 558</script>
558 559 560 561 562<!-- Baidu Tongji --> 563 564 565 566<!-- Side Catalog --> 567 568 569 570<!-- Multi-Lingual --> 571 572 573 574 575<!-- Image to hack wechat --> 576<img src="/img/icon_wechat.png" width="0" height="0" /> 577<!-- Migrate from head to bottom, no longer block render and still work --> 578 579</body> 580 581</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.