-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
2262 lines (1866 loc) · 134 KB
/
atom.xml
File metadata and controls
2262 lines (1866 loc) · 134 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><![CDATA[Lighter]]></title>
<link href="http://lighter.tw/atom.xml" rel="self"/>
<link href="http://lighter.tw/"/>
<updated>2015-03-25T07:04:02+08:00</updated>
<id>http://lighter.tw/</id>
<author>
<name><![CDATA[Willy lighter]]></name>
<email><![CDATA[apple.xva@gmail.com]]></email>
</author>
<generator uri="http://octopress.org/">Octopress</generator>
<entry>
<title type="html"><![CDATA[Install nvm on mac]]></title>
<link href="http://lighter.tw/blog/2015/03/25/install-nvm-on-mac/"/>
<updated>2015-03-25T05:47:08+08:00</updated>
<id>http://lighter.tw/blog/2015/03/25/install-nvm-on-mac</id>
<content type="html"><![CDATA[<p><code>nvm</code>可以讓你安裝多個<code>node</code>版本,並且切換現在使用的版本,其實這跟<code>ruby</code>的<code>rvm</code>很像。</p>
<p>首先更新<code>brew</code>。</p>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
</pre></td><td class="code"><pre><code class=""><span class="line">$ brew update
</span><span class="line">$ brew upgrade</span></code></pre></td></tr></table></div></figure></notextile></div>
<p>然後安裝<code>nvm</code>。</p>
<p><code>$ brew install nvm</code></p>
<p>最後需要將下面這行加入到<code>.profile</code>, <code>.bashrc</code> 或 <code>.zshrc</code> ,這樣才可以執行<code>rvm</code>,因為我是使用<code>zsh</code>,所以我加到<code>.zshrc</code>。</p>
<p><code>$ echo "source $(brew --prefix nvm)/nvm.sh" >> ~/.zshrc</code></p>
<h2 id="node--npm">安裝 node & npm</h2>
<p>可以使用下面這個指令列出所有的<code>node</code>版本</p>
<p><code>$ nvm ls-remote</code></p>
<p>接著我想裝<code>v0.12.1</code>的版本</p>
<p><code>$ nvm install -s v0.12.1</code></p>
<p>安裝完成後使用下面這指令可以看到安裝好的版本</p>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
</pre></td><td class="code"><pre><code class=""><span class="line">$ node -v
</span><span class="line">$ npm -v</span></code></pre></td></tr></table></div></figure></notextile></div>
<p>下面這行指令可以讓你每次預設自動使用的版本。</p>
<p><code>$ nvm alias default 0.12.1</code></p>
<p>如果要切換版本可以使用。</p>
<p><code>$nvm use VERSION</code></p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[IE scroll bar hidden not work]]></title>
<link href="http://lighter.tw/blog/2015/01/12/ie-scroll-bar-hidden-not-work/"/>
<updated>2015-01-12T23:07:39+08:00</updated>
<id>http://lighter.tw/blog/2015/01/12/ie-scroll-bar-hidden-not-work</id>
<content type="html"><![CDATA[<p>情境是這樣的,今天我不想要顯示scroll bar所以用css的<code>overflow-y</code>隱藏掉,在Chrome測試時寫一個<code>mousewheel</code> event是正常的,但是在ie似乎原本的寫法不行,上網google了一下,最後使用這個解法,註冊一個<code>wheelDelta</code> event,阿然後一樣…在<code>mousewheel</code>事件內來算<code>scrollTop</code>,很簡單,但紀錄一下…</p>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
</pre></td><td class="code"><pre><code class="javascript"><span class="line"><span class="nx">$</span><span class="p">(</span><span class="kd">function</span><span class="p">(){</span>
</span><span class="line"> <span class="nx">$</span><span class="p">.</span><span class="nx">event</span><span class="p">.</span><span class="nx">props</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="s1">'wheelDelta'</span><span class="p">);</span>
</span><span class="line"> <span class="nx">$</span><span class="p">(</span><span class="s1">'tbody'</span><span class="p">).</span><span class="nx">on</span><span class="p">(</span><span class="s1">'mousewheel'</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">e</span><span class="p">){</span>
</span><span class="line"> <span class="kd">var</span> <span class="nx">delta</span> <span class="o">=</span> <span class="nx">e</span><span class="p">.</span><span class="nx">wheelDelta</span> <span class="o">||</span> <span class="o">-</span><span class="nx">e</span><span class="p">.</span><span class="nx">detail</span><span class="p">;</span>
</span><span class="line"> <span class="kd">var</span> <span class="nx">scrollTop</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="k">this</span><span class="p">).</span><span class="nx">scrollTop</span><span class="p">();</span>
</span><span class="line"> <span class="nx">$</span><span class="p">(</span><span class="k">this</span><span class="p">).</span><span class="nx">scrollTop</span><span class="p">(</span><span class="nx">scrollTop</span> <span class="o">+=</span> <span class="p">(</span><span class="nx">delta</span> <span class="o"><</span> <span class="mi">0</span> <span class="o">?</span> <span class="mi">1</span> <span class="o">:</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="mi">30</span><span class="p">);</span>
</span><span class="line"> <span class="p">});</span>
</span><span class="line"><span class="p">});</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>
<p>整個範例CODE我放在<a href="https://gist.github.com/lighter/aac71f62b1fb4f802fbc">GIST</a>紀錄一下。</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[[筆記]swift Part 7]]></title>
<link href="http://lighter.tw/blog/2014/08/04/bi-ji-swift-part-7/"/>
<updated>2014-08-04T23:49:38+08:00</updated>
<id>http://lighter.tw/blog/2014/08/04/bi-ji-swift-part-7</id>
<content type="html"><![CDATA[<h2 id="subscripts-">Subscripts 下標語法</h2>
<p>練習範例</p>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
</pre></td><td class="code"><pre><code class=""><span class="line">struct testStruct {
</span><span class="line"> let multiplier: Int
</span><span class="line"> subscript(index:Int) -> Int {
</span><span class="line"> return multiplier * index
</span><span class="line"> }
</span><span class="line">}
</span><span class="line">
</span><span class="line">let stuct = testStruct(multiplier: 20)
</span><span class="line">stuct[3]</span></code></pre></td></tr></table></div></figure></notextile></div>
<!-- more -->
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
<span class="line-number">18</span>
<span class="line-number">19</span>
<span class="line-number">20</span>
<span class="line-number">21</span>
<span class="line-number">22</span>
<span class="line-number">23</span>
<span class="line-number">24</span>
<span class="line-number">25</span>
<span class="line-number">26</span>
<span class="line-number">27</span>
<span class="line-number">28</span>
<span class="line-number">29</span>
<span class="line-number">30</span>
<span class="line-number">31</span>
<span class="line-number">32</span>
<span class="line-number">33</span>
</pre></td><td class="code"><pre><code class=""><span class="line">import Cocoa
</span><span class="line">
</span><span class="line">func randomizer(#range:Range<UInt32>) -> UInt32 {
</span><span class="line"> return range.startIndex + arc4random_uniform(range.endIndex - range.startIndex + 1)
</span><span class="line">}
</span><span class="line">
</span><span class="line">struct LevelMaker {
</span><span class="line"> var grid = Array<Array<UInt32>>()
</span><span class="line">
</span><span class="line"> mutating func makeGrid() {
</span><span class="line"> var numColumns = 27
</span><span class="line"> var numRows = 52
</span><span class="line"> for column in 0..<numColumns {
</span><span class="line"> var newRow = Array<UInt32>()
</span><span class="line"> for row in 0..<numRows {
</span><span class="line"> newRow.append(randomizer(range:1..<32))
</span><span class="line"> }
</span><span class="line"> self.grid.append(newRow)
</span><span class="line"> }
</span><span class="line"> }
</span><span class="line">
</span><span class="line"> subscript(row:Int, column:Int) -> UInt32 {
</span><span class="line"> return grid[row][column]
</span><span class="line"> }
</span><span class="line">
</span><span class="line"> init() {
</span><span class="line"> makeGrid()
</span><span class="line"> }
</span><span class="line">}
</span><span class="line">
</span><span class="line">var level2 = LevelMaker()
</span><span class="line">level2.grid
</span><span class="line">level2.grid[2][5]</span></code></pre></td></tr></table></div></figure></notextile></div>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[[筆記]swift part 6]]></title>
<link href="http://lighter.tw/blog/2014/08/02/bi-ji-swift-part-6/"/>
<updated>2014-08-02T15:57:18+08:00</updated>
<id>http://lighter.tw/blog/2014/08/02/bi-ji-swift-part-6</id>
<content type="html"><![CDATA[<h2 id="enums">Enums(列舉)</h2>
<p><code>enum</code>是定義一個通用型別的一組相關的值!我本身很少用,所以有點陌生…哈,還是來記錄一下,下面的code都是根據apple的文件練習的。</p>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
<span class="line-number">18</span>
<span class="line-number">19</span>
<span class="line-number">20</span>
<span class="line-number">21</span>
<span class="line-number">22</span>
<span class="line-number">23</span>
</pre></td><td class="code"><pre><code class=""><span class="line">// enum 格式
</span><span class="line">enum testEnum {
</span><span class="line">
</span><span class="line">}
</span><span class="line">
</span><span class="line">// 包含了東西南北的 compassPoint enum
</span><span class="line">enum compassPoint {
</span><span class="line"> case East
</span><span class="line"> case West
</span><span class="line"> case South
</span><span class="line"> case North
</span><span class="line">}
</span><span class="line">
</span><span class="line">// 縮減為一行
</span><span class="line">enum compassPoint2 {
</span><span class="line"> case East, West, South, North
</span><span class="line">}
</span><span class="line">
</span><span class="line">var directionToHead = compassPoint.West
</span><span class="line">
</span><span class="line">// 如果知道是 compassPoint形態,則可以忽略'compassPoint'
</span><span class="line">// 直接使用 .East
</span><span class="line">directionToHead = .East</span></code></pre></td></tr></table></div></figure></notextile></div>
<!-- more -->
<h2 id="enum-with-switch">Enum with switch</h2>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
<span class="line-number">18</span>
<span class="line-number">19</span>
<span class="line-number">20</span>
<span class="line-number">21</span>
</pre></td><td class="code"><pre><code class=""><span class="line">enum compassPoint {
</span><span class="line"> case East
</span><span class="line"> case West
</span><span class="line"> case South
</span><span class="line"> case North
</span><span class="line">}
</span><span class="line">
</span><span class="line">var directionToHead = compassPoint.East
</span><span class="line">
</span><span class="line">switch directionToHead {
</span><span class="line"> case .East:
</span><span class="line"> println("East")
</span><span class="line"> case .West:
</span><span class="line"> println("West")
</span><span class="line"> case .South:
</span><span class="line"> println("South")
</span><span class="line"> case .North:
</span><span class="line"> println("North")
</span><span class="line"> default:
</span><span class="line"> println("No value")
</span><span class="line">}</span></code></pre></td></tr></table></div></figure></notextile></div>
<h2 id="associated-value">Associated Value</h2>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
</pre></td><td class="code"><pre><code class=""><span class="line">enum Barcode {
</span><span class="line"> case UPCA(Int, Int, Int)
</span><span class="line"> case QRCode(String)
</span><span class="line">}
</span><span class="line">
</span><span class="line">var productBarcode = Barcode.UPCA(1, 123_456_789, 222)
</span><span class="line">productBarcode = .QRCode("ABCDEFGHIJKLMNOP")
</span><span class="line">
</span><span class="line">switch productBarcode {
</span><span class="line"> case .UPCA(let numberSystem, let identifier, let check):
</span><span class="line"> println("UPC-A with value of \(numberSystem), \(identifier), \(check).")
</span><span class="line"> case .QRCode(let productCode):
</span><span class="line"> println("QR code with value of \(productCode).")
</span><span class="line">}
</span><span class="line">
</span><span class="line">// 輸出 "QR code with value of ABCDEFGHIJKLMNOP."</span></code></pre></td></tr></table></div></figure></notextile></div>
<h2 id="row-value">Row value</h2>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
<span class="line-number">18</span>
<span class="line-number">19</span>
<span class="line-number">20</span>
<span class="line-number">21</span>
<span class="line-number">22</span>
<span class="line-number">23</span>
<span class="line-number">24</span>
<span class="line-number">25</span>
<span class="line-number">26</span>
<span class="line-number">27</span>
<span class="line-number">28</span>
</pre></td><td class="code"><pre><code class=""><span class="line">enum Number:Int {
</span><span class="line"> case One = 1
</span><span class="line"> case Two = 2
</span><span class="line"> case Three = 3
</span><span class="line">}
</span><span class="line">
</span><span class="line">// 縮寫成一行,僅需定義一開始
</span><span class="line">enum Number2: Int {
</span><span class="line"> case One = 1, Two, Three
</span><span class="line">}
</span><span class="line">
</span><span class="line">// 使用 toRaw 來取得值 1
</span><span class="line">var numberOne = Number.One.toRaw()
</span><span class="line">
</span><span class="line">// 將 1 轉回去取得 對應的 enum 值 One
</span><span class="line">var numberTwo = Number.fromRaw(2)
</span><span class="line">
</span><span class="line">if let two = Number.fromRaw(2) {
</span><span class="line"> switch two {
</span><span class="line"> case .Two:
</span><span class="line"> println("It is number 2")
</span><span class="line"> default:
</span><span class="line"> println("Not found")
</span><span class="line"> }
</span><span class="line">}
</span><span class="line">else {
</span><span class="line"> println("Not found")
</span><span class="line">}</span></code></pre></td></tr></table></div></figure></notextile></div>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[[筆記]swift part 5]]></title>
<link href="http://lighter.tw/blog/2014/07/31/bi-ji-swift-part-5/"/>
<updated>2014-07-31T21:41:58+08:00</updated>
<id>http://lighter.tw/blog/2014/07/31/bi-ji-swift-part-5</id>
<content type="html"><![CDATA[<h2 id="closure">closure</h2>
<p><code>closure</code>就有如同<code>c</code>、<code>objective-c</code>的block。<code>function</code>其實也可以當作參數一樣傳遞,下面用簡單的範例做練習。</p>
<p><img src="http://lighter.tw/images/swift/swift-36.jpg" /></p>
<!-- more -->
<p><code>closure</code>的格式如下</p>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
</pre></td><td class="code"><pre><code class=""><span class="line">{ (parameters) -> returnType in
</span><span class="line"> statements
</span><span class="line">}</span></code></pre></td></tr></table></div></figure></notextile></div>
<p>單行的表示式<code>closure</code>可以省略<code>return</code>,參數的部分甚至可以省略寫成<code>$0</code>代表第一個參數,<code>$1</code>代表第二個參數,以此類推,下面用簡單的範例表示</p>
<p><img src="http://lighter.tw/images/swift/swift-37.jpg" /></p>
<p>下面這個範例只是單純的介紹寫法而已!</p>
<p><code>sort</code>這個方法預設是做了升序排列,如果你希望降序排列,可以傳入一個function(<code>closure</code>)進去。</p>
<ul>
<li><code>寫法1</code>很單純,傳入已經寫好的function。</li>
<li><code>寫法2</code>則是將方法名稱、參數、回傳值省略了,並且使用<code>$0</code>表示第一個參數,<code>$1</code>為第二個以以此類推。</li>
<li><code>寫法3</code>則是把參數也給省略了,直接使用<code><</code>符號,swift則可以自動幫你推斷要將這兩個參數做<code><</code>的邏輯。</li>
</ul>
<p><img src="http://lighter.tw/images/swift/swift-38.jpg" /></p>
<h2 id="lazydeldel-with-closure">lazy(<del>懶惰的?</del>緩慢的) with closure</h2>
<p>什麼是<code>lazy</code>?,<code>就是當你真的需要使用,才真的會分配(記憶體)給你使用</code>。至於以前<code>objcetive-c</code>的寫法可以參考這篇文章<a href="http://mikebuss.com/2014/06/22/lazy-initialization-swift/">Lazy Initialization with Swift</a>,我覺得她寫很明確,所以我就用我理解的意思大概描述一遍,至於傳統的<code>objective-c</code>的寫法我就不贅述了,畢竟這邊是swift的note。</p>
<p><code>lazy</code>在swift的使用方式如下</p>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
</pre></td><td class="code"><pre><code class=""><span class="line">lazy var lazyVar = [String]()</span></code></pre></td></tr></table></div></figure></notextile></div>
<p>只需要在<code>var</code>前面加上<code>lazy</code>這個keyword,還有一點要注意的是<code>lazy</code>並不能使用<code>let</code>,因為常數在初始化前是必需要有值的。</p>
<blockquote>
<p>原本的寫法是<code>@lazy</code>後來修改為<code>lazy</code>,把小老鼠<code>@</code>給省略了。</p>
</blockquote>
<p>如果你希望你的變數有會因為一些邏輯判斷而有不同的值,這時可以用<code>closure</code>來完成,下面這段code直接貼在playground是無法使用的,他會告訴你<code>lazy</code>必須是<code>struct</code>或<code>class</code>的成員。</p>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
</pre></td><td class="code"><pre><code class=""><span class="line">lazy var lazyStr:String = {
</span><span class="line"> // do you want
</span><span class="line"> return "This is a test"
</span><span class="line">}()</span></code></pre></td></tr></table></div></figure></notextile></div>
<p>在什麼時候你會需要使用使用<code>lazy</code>呢?如果你的變數的值,是需要等到物件初始化完成後才能明確的定義,這時你就會需要使用,下面使用一個簡單的範例;下面範例中可以看到<code>[unowned self]</code>,這是要避免<code>strong reference cycle</code>。</p>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
<span class="line-number">18</span>
<span class="line-number">19</span>
</pre></td><td class="code"><pre><code class=""><span class="line">class testClass {
</span><span class="line"> var name:String
</span><span class="line">
</span><span class="line"> lazy var sayHiTo:String = {
</span><span class="line"> [unowned self] in
</span><span class="line"> return "Hi~ \(self.name)"
</span><span class="line"> }()
</span><span class="line">
</span><span class="line"> init(name:String) {
</span><span class="line"> self.name = name
</span><span class="line">
</span><span class="line"> }
</span><span class="line">}
</span><span class="line">
</span><span class="line">var myClass = testClass(name: "Maya")
</span><span class="line">// 實立化一個myClass後,這時sayHiTo變數 is nil
</span><span class="line">
</span><span class="line">myClass.sayHiTo
</span><span class="line">// 當sayHiTo這個變數被呼叫到才真正的給予值</span></code></pre></td></tr></table></div></figure></notextile></div>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[[筆記]swift part 4]]></title>
<link href="http://lighter.tw/blog/2014/07/30/bi-ji-swift-part-4/"/>
<updated>2014-07-30T21:16:15+08:00</updated>
<id>http://lighter.tw/blog/2014/07/30/bi-ji-swift-part-4</id>
<content type="html"><![CDATA[<h2 id="class">class(類別)</h2>
<p>類別整個跟結構的寫法沒有太大的差異,直接看範例吧!</p>
<p><img src="http://lighter.tw/images/swift/swift-32.jpg" /></p>
<!-- more -->
<h2 id="section">繼承</h2>
<p><img src="http://lighter.tw/images/swift/swift-33.jpg" /></p>
<h2 id="class-func">class func(類別方法)</h2>
<p>類別方法可允許不用實立化物件而直接呼叫,只需要在方法前面加上<code>class</code>這個keyword;在<code>struct</code>則是要用<code>static</code>。</p>
<p><img src="http://lighter.tw/images/swift/swift-34.jpg" /></p>
<h2 id="class-ref">class ref</h2>
<p>class是參考型別,從下面的範例可以看到<code>myClass2</code>是參考<code>myClass1</code>,所以當<code>myClass1</code>有所改變,<code>myClass2</code>也會跟著改變;而struct並不會因為這樣就有所改變。</p>
<p><img src="http://lighter.tw/images/swift/swift-35.jpg" /></p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[[筆記]swift part 3]]></title>
<link href="http://lighter.tw/blog/2014/07/26/bi-ji-swift-part-3/"/>
<updated>2014-07-26T11:18:42+08:00</updated>
<id>http://lighter.tw/blog/2014/07/26/bi-ji-swift-part-3</id>
<content type="html"><![CDATA[<h2 id="struct">Struct(結構)</h2>
<p>在<code>swift</code>,結構基本上跟類別(class)很像,直接先看簡單的範例吧!下面建立了一個<code>car</code>的結構,裡面包含了<code>color</code>和<code>number</code>,接著實立化這個<code>car</code>結構,整個跟類別很像吧!</p>
<p><img src="http://lighter.tw/images/swift/swift-29.jpg" /></p>
<!-- more -->
<p>接著再一個簡單的範例,<code>struct</code>裡面使用了別的<code>struct</code>,以及<code>struct</code>內含有方法</p>
<p><img src="http://lighter.tw/images/swift/swift-30.jpg" /></p>
<p>接這個範例能夠顯現<code>struct</code>跟類別不同的地方,在下面這個範例中可以看到<code>strunct</code>內的方法,會去操作內部的屬性,也就是<code>myName</code>,只要會去操作到內部的屬性值,在方法前面都需要加上<code>mutating</code>這個 keyword !</p>
<p><img src="http://lighter.tw/images/swift/swift-31.jpg" /></p>
<p>這是我參考stackoverflow這篇答案的[<a href="http://stackoverflow.com/a/24035861/685060">http://stackoverflow.com/a/24035861/685060</a>],以下是我大意理解的節錄</p>
<blockquote>
<p>結構跟類別(class)很像,不同的地方是結構有兩種模式,<code> immutable</code>/<code>mutable</code>,而類別通常的操作是用<code>reference</code>,而這種操作方式算是<code>mutable</code>,因為使用<code>reference</code>的方式操作,如果又是<code>immutable</code>的情況,這樣顯得非常困難。</p>
</blockquote>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[[筆記]swift part 2]]></title>
<link href="http://lighter.tw/blog/2014/07/23/bi-ji-swift-part-2/"/>
<updated>2014-07-23T16:29:37+08:00</updated>
<id>http://lighter.tw/blog/2014/07/23/bi-ji-swift-part-2</id>
<content type="html"><![CDATA[<h2 id="function">Function(函式,方法)</h2>
<p>方法的一開始前面一定有<code>func</code>這個關鍵字,我是有點覺得奇怪…何不乾脆用完整個名稱就好了,為什麼要縮減…成<code>func</code>。</p>
<p><img src="http://lighter.tw/images/swift/swift-21.jpg" /></p>
<!-- more -->
<h2 id="external-parameter-names">External Parameter Names(外部參數名)</h2>
<p><code>func</code>要帶入參數直接在<code>( )</code>內寫入,其中比較不同的是否有宣告外部參數,為了code的可讀性,加上外部參數名,可以直接了解該參數的作用,外部參數名跟參數名稱可以不一樣,如果你要將外部參數跟參數名稱設定一樣可以在參數名稱前面加上一個<code>#</code>號,這樣可省去重複打一樣的名稱。</p>
<p><img src="http://lighter.tw/images/swift/swift-22.jpg" /></p>
<h2 id="section">回傳值</h2>
<p>一個<code>func</code>要有回傳值,直接在<code>( )</code>後加上<code>-> TYPE</code></p>
<p><img src="http://lighter.tw/images/swift/swift-23.jpg" /></p>
<p>如果有多個值要回傳,可以使用<code>Tuple</code></p>
<p><img src="http://lighter.tw/images/swift/swift-24.jpg" /></p>
<p>方法也可以當作參數傳入</p>
<p><img src="http://lighter.tw/images/swift/swift-25.jpg" /></p>
<h2 id="nested-function">Nested Function(嵌套函式)</h2>
<p><code>func</code>回傳除了一般的<code>Int</code>, <code>String</code>,也可以回傳<code>func</code></p>
<p><img src="http://lighter.tw/images/swift/swift-26.jpg" /></p>
<p>如果有多個參數要傳入,除了可以考慮組成一個陣列在傳入,或是可以用<code>...</code>當作有多個參數要傳入</p>
<p><img src="http://lighter.tw/images/swift/swift-27.jpg" /></p>
<h2 id="inout">inout</h2>
<p>這其實跟指標很像,下面的範例可以看到<code>sum</code>傳入的是<code>&sum</code>也就是該參數的位置,所以計算的結果也會改變<code>sum</code>的值</p>
<p><img src="http://lighter.tw/images/swift/swift-28.jpg" /></p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[[筆記]swift part 1]]></title>
<link href="http://lighter.tw/blog/2014/07/20/bi-ji-swift-part-1/"/>
<updated>2014-07-20T15:26:30+08:00</updated>
<id>http://lighter.tw/blog/2014/07/20/bi-ji-swift-part-1</id>
<content type="html"><![CDATA[<p>最近看了一下<code>swift</code>,順手記錄一下,一開始當然是最基本的語法囉,在新的<code>xcode</code>中出現了<code>playground</code>,這是一個很適合用來練習基本的語法,不用特地去建立一個大專案,也不用特地去編譯整個專案才能得到結果,這感覺跟其他語言在終端機下執行很像。以下就是簡單的記錄</p>
<!-- more -->
<p>一開始建立好<code>playground</code>的檔案就可以看到他已經為你建立好基本的範例了!但這裡並不需要使用到<code>Cocoa</code>,因為基礎的語法練習似乎還不會用到內建的東西,所以其實可以把它刪除。</p>
<p><img src="http://lighter.tw/images/swift/swift-1.jpg" /></p>
<h2 id="var">var(變數)</h2>
<p>變數的定義格式如下</p>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
</pre></td><td class="code"><pre><code class=""><span class="line">var VAR_NAME:TYPE = ASSIGN_VALUE</span></code></pre></td></tr></table></div></figure></notextile></div>
<p>一開始需要使用<code>var</code>來定義這是一個變數,至於變數的形態你可以自行定義或是交由編譯器來辨別,然後變數顧名思義就是會變得數,所以之後變數的直可以任意給予新的值。變數的值可以變,但變數的形態不能變,看到<code>str3</code>為<code>string</code>的形態,後面要assign一個數字就會出現錯誤。</p>
<p><img src="http://lighter.tw/images/swift/swift-2.jpg" /></p>
<h2 id="let">let(常數)</h2>
<p>常數的定義與變數不同,是使用<code>let</code>這個keyword,而且常數只能在一開始assign值,事後並不能更改他</p>
<p><img src="http://lighter.tw/images/swift/swift-3.jpg" /></p>
<h2 id="for">for(回圈)</h2>
<p>下面這個範例很明顯要印出1到5的數字但不包含5(也就是1到4),但這裡有個小小不一樣的地方,在之前的版本使用<code>1..5</code>就可以了,這根<code>ruby</code>很像,但是後來在beta3就不能使用了,要改用<code>..<</code></p>
<p><img src="http://lighter.tw/images/swift/swift-4.jpg" /></p>
<p>如果單存只是想要跑回圈並無任何變數可以將<code>i</code>取代為<code>_</code>(底線)</p>
<p><img src="http://lighter.tw/images/swift/swift-5.jpg" /></p>
<p>現在要包含最後一個數字的範圍也要跑,可以改用<code>...</code>(三個點)</p>
<p><img src="http://lighter.tw/images/swift/swift-6.jpg" /></p>
<p>如果不想遞增的跑回圈,例如基數偶數,可以改用下面這種方式來寫,這跟以前原本的<code>for</code>回圈一樣,差別就是不用小括號</p>
<p><img src="http://lighter.tw/images/swift/swift-7.jpg" /></p>
<h2 id="if">if(如果…)</h2>
<p><code>if</code>,如果條件成立,就會進去執行,這很簡單啦!就不再費言了!</p>
<p><img src="http://lighter.tw/images/swift/swift-8.jpg" /></p>
<p>我覺得比較特別也比較好的地方是這個!以往<code>1</code>也就是會被認作為<code>true</code>,所以不小心該變數的值就是<code>1</code>,那這樣判斷一定會通過,但是你並不是因為該變數為<code>1</code>就想讓它通過。但swift似乎不允許這樣,所以當你這樣定義的時候就會出現錯誤訊息,如下圖</p>
<p><img src="http://lighter.tw/images/swift/swift-9.jpg" /></p>
<h2 id="switch">switch(選擇)</h2>
<p>這裡可以看到我將<code>money</code>變數定義為<code>3_000_000</code>,這個<code>_</code>底線,在swift終是被允許的,主要是讓數字容易閱讀。而swift裡的<code>switch case</code>內是不需要寫<code>break</code>的,它自行會為每個<code>case</code>做<code>break</code>。</p>
<p><img src="http://lighter.tw/images/swift/swift-10.jpg" /></p>
<p>多條件的要執行同一個的情況呢?直接在<code>case</code>內定義多個條件,用逗點隔開,甚至你可以使用範圍的方式<code>..<</code>,如下圖</p>
<p><img src="http://lighter.tw/images/swift/swift-11.jpg" /></p>
<h2 id="fallthrough">Fallthrough(貫穿)</h2>
<p>如果你希望繼續往下執行下一個<code>case</code>,你可以使用<code>fallthrough</code>,就會繼續往下一個<code>case</code>執行,但下一個如果沒有<code>fallthrough</code>就會停止,也就是說他只會執行到下一個就停止,除非你每一個<code>case</code>內都有宣告</p>
<p><img src="http://lighter.tw/images/swift/swift-12.jpg" /></p>
<h2 id="tuple-use-with-switch">Tuple(元組、組值) use with Switch</h2>
<p>這給我的感覺有點像是陣列,但其實不是,我覺得這很好用,尤其是在回傳值得時候。下面這個範例結合<code>switch</code>來使用,這邊定義一個<code>tuple</code>的變數,裡面存放了兩個數字!很簡單吧</p>
<p><img src="http://lighter.tw/images/swift/swift-13.jpg" /></p>
<p>也可以使用條<code>where</code>條件檢查</p>
<p><img src="http://lighter.tw/images/swift/swift-14.jpg" /></p>
<h2 id="labeled-statements">Labeled Statements(帶標簽的語句)</h2>
<p>這個我覺得蠻有趣的!可以去控制區塊的回圈,直接看code可能比較清楚了</p>
<p><img src="http://lighter.tw/images/swift/swift-15.jpg" /></p>
<h2 id="array">Array(陣列)</h2>
<p>這邊我覺得比較不一樣的是,陣列可以用<code>+=</code>直接在陣列後面加上(也就是串聯起來),其他都蠻好理解的!</p>
<p><img src="http://lighter.tw/images/swift/swift-16.jpg" /></p>
<p>清空陣列</p>
<p><img src="http://lighter.tw/images/swift/swift-17.jpg" /></p>
<p>重複建立同樣的值,如果要將兩個陣列串聯起來,一樣使用<code>+</code>號就可以,但需注意這兩個陣咧的形態必須都一樣,下列這個範例一個是<code>Int</code>另一個是<code>Double</code>那這樣就不能串聯起來了。</p>
<p><img src="http://lighter.tw/images/swift/swift-18.jpg" /></p>
<h2 id="dictionary">Dictionary(字典)</h2>
<p>定義方式有兩種,如下圖</p>
<p><img src="http://lighter.tw/images/swift/swift-19.jpg" /></p>
<p>字典的操作也很簡單</p>
<p><img src="http://lighter.tw/images/swift/swift-20.jpg" /></p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[[筆記] 安裝 Vagrant]]></title>
<link href="http://lighter.tw/blog/2014/06/27/bi-ji-an-zhuang-vagrant/"/>
<updated>2014-06-27T22:36:58+08:00</updated>
<id>http://lighter.tw/blog/2014/06/27/bi-ji-an-zhuang-vagrant</id>
<content type="html"><![CDATA[<p>安裝環境 OS X 10.9.3</p>
<p>Step 1. 下載 <a href="http://www.vagrantup.com/downloads.html">Vagrant</a></p>
<p>Step 2. 下載OS</p>
<p>開啟終端機,建立好一個<code>vagrant</code>的資料夾</p>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
</pre></td><td class="code"><pre><code class=""><span class="line">$ mkdir vagrant
</span><span class="line">$ cd vagrant</span></code></pre></td></tr></table></div></figure></notextile></div>
<p><a href="http://www.vagrantbox.es/">Vagrantbox</a>,這邊有很多已經裝好的box,你可以自己找行你需要的。</p>
<p>這邊我安裝的是<code>Ubuntu precise 64 VirtualBox</code>,他的網址是<code>http://files.vagrantup.com/precise64.box</code>。接著在終端機輸入下面的指令安裝</p>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
</pre></td><td class="code"><pre><code class=""><span class="line">$ vagrant box add Ubuntu64 http://files.vagrantup.com/precise64.box</span></code></pre></td></tr></table></div></figure></notextile></div>
<p>安裝完畢後,需將這個虛擬機初始化並且啟動</p>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
</pre></td><td class="code"><pre><code class=""><span class="line">$ vagrant box init Ubuntu64
</span><span class="line">$ vagrant up #啟動</span></code></pre></td></tr></table></div></figure></notextile></div>
<p>啟動完成後,需要連線到這台虛擬機</p>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
</pre></td><td class="code"><pre><code class=""><span class="line">$ vagrant ssh</span></code></pre></td></tr></table></div></figure></notextile></div>
<h2 id="vagrant-">Vagrant 指令</h2>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
</pre></td><td class="code"><pre><code class=""><span class="line">$ vagrant halt #關閉
</span><span class="line">$ vagrant reload #重啟
</span><span class="line">$ vagrant status #狀態
</span><span class="line">$ vagrant destroy #刪除
</span><span class="line">$ vagrant list #列出虛擬機</span></code></pre></td></tr></table></div></figure></notextile></div>
<h3 id="section">參考資料</h3>
<ul>
<li><a href="http://www.vagrantup.com/">Vagrant</a></li>
<li><a href="http://vinn.logdown.com/posts/2014/05/22/note-use-of-vagrant-deployment">[Note] 使用 Vagrant進行部署練習</a></li>
<li><a href="http://www.vagrantbox.es/">Vagrantbox.es</a></li>
<li><a href="http://eva0919.github.io/2013/04/26/%E7%94%A8vm%E6%89%8D%E6%98%AF%E5%A5%BD%E7%9A%84%E5%B7%A5%E7%A8%8B%E5%B8%AB-vagrant%E7%AF%87%E5%85%A5%E9%96%80%E7%89%88/">用VM才是好的工程師-vagrant篇(入門版)</a></li>
<li><a href="http://gogojimmy.net/2013/05/26/vagrant-tutorial/">[教學]使用Vagrant練習環境佈署</a></li>
</ul>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Laravel part 8]]></title>
<link href="http://lighter.tw/blog/2014/06/21/laravel-part-8/"/>
<updated>2014-06-21T22:37:03+08:00</updated>
<id>http://lighter.tw/blog/2014/06/21/laravel-part-8</id>
<content type="html"><![CDATA[<p>這章節只是想做個整理,這些只是我根據官方文件還有一些影片自己實做,然後加以整理大概記錄一下,主要是釐清一些過程使用,所以幾乎都不會詳細的描述。如果有問題歡迎一起討論。</p>
<p>目前使用比較多的還是codeigniter,相較之下laravel的debug比ci界面好看多了,還有<code>artisan</code>也真的蠻好用的。<code>Eloquent</code>真的是很好用,但是我不太確定當複雜的sql查詢時,很多大量的子查詢,還有個家sql提供的內件方法也都不一樣時,是否也可寫的這麼容易?就我目前工作上使用ci,我都是自己寫sql使用bind的方式,至於為什麼要用bind,似乎也是oracle的重複查詢時速度會比較快(因為cache),有時間再來查查資料吧。</p>
<p>整個完整的code我也放在GIT上供大家參考囉<a href="https://github.com/lighter/Laravel_sample">[Laravel GIT]</a></p>
<ol>
<li><a href="http://lighter.tw/blog/2014/05/29/laravel-part-1/">Laravel part 1</a> - 安裝 <code>Laravel</code></li>
<li><a href="http://lighter.tw/blog/2014/05/30/laravel-part-2/">Laravel part 2</a> - 安裝<code>jquery</code>、<code>bootstrap</code></li>
<li><a href="http://lighter.tw/blog/2014/05/31/laravel-part-3/">Laravel part 3</a> - 建立資料庫</li>
<li><a href="http://lighter.tw/blog/2014/06/02/laravel-part-4/">Laravel part 4</a> - 登入 & 簡易Session操作</li>
<li><a href="http://lighter.tw/blog/2014/06/04/laravel-part-5/">Laravel part 5</a> - 簡單的樣板使用</li>
<li><a href="http://lighter.tw/blog/2014/06/07/laravel-part-6/">Laravel part 6</a> - 帳號建立 & 列表</li>
<li><a href="http://lighter.tw/blog/2014/06/09/laravel-part-7/">Laravel part 7</a> - 帳號修改 & 顯示帳號資訊 & 修改帳號 & 刪除帳號</li>
</ol>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[laravel part 7]]></title>
<link href="http://lighter.tw/blog/2014/06/09/laravel-part-7/"/>
<updated>2014-06-09T00:02:13+08:00</updated>
<id>http://lighter.tw/blog/2014/06/09/laravel-part-7</id>
<content type="html"><![CDATA[<p>這也是最後一個章節了,將會介紹到</p>
<ol>
<li>顯示帳號資訊</li>
<li>修改帳號資訊</li>
<li>刪除帳號</li>
</ol>
<!-- more -->
<h2 id="section">顯示帳號資訊</h2>
<p>開啓<code>AccountController.php</code>,找到<code>show</code>這個方法,修改的code如下</p>
<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>AccountController.php </span></figcaption>
<div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
</pre></td><td class="code"><pre><code class="php"><span class="line"> <span class="k">public</span> <span class="k">function</span> <span class="nf">show</span><span class="p">(</span><span class="nv">$id</span><span class="p">)</span>
</span><span class="line"> <span class="p">{</span>
</span><span class="line"> <span class="nv">$account</span> <span class="o">=</span> <span class="nx">User</span><span class="o">::</span><span class="na">find</span><span class="p">(</span><span class="nv">$id</span><span class="p">);</span>
</span><span class="line"> <span class="nv">$view</span> <span class="o">=</span> <span class="nx">View</span><span class="o">::</span><span class="na">make</span><span class="p">(</span><span class="s1">'account.show'</span><span class="p">)</span>
</span><span class="line"> <span class="o">-></span><span class="na">with</span><span class="p">(</span><span class="s1">'account'</span><span class="p">,</span> <span class="nv">$account</span><span class="p">);</span>
</span><span class="line"> <span class="k">return</span> <span class="nv">$view</span><span class="p">;</span>
</span><span class="line"> <span class="p">}</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>
<p>這邊要搜尋帳號也很簡單,使用<code>User::find($id)</code>就可以根據<code>ID</code>找到對應的帳號資料,也不用特地去寫些sql語法,但這應該只單存這種簡單的情況下使用吧!如果有多個Table要Join,或是有些特殊的欄位條件要篩選應該就沒這容易了。</p>
<p>最後將這個搜尋結果塞到<code>view</code>裡面使用,所以接下來就是編輯view的部分;開啓<code>app/views/account/show.blade.php</code>,輸入的code如下</p>
<div><script src="https://gist.github.com/941fbf8d6296043346f6.js?file=show.blade.php"></script>
<noscript><pre><code>@extends('layouts.base')
@section('content')
<h1>Show Account</h1>
{{ Form::open(['class' => 'form-horizontal', 'role' => 'form']) }}
<div class="form-group">
<label class="col-sm-2 control-label" for="inputEmail3">Email</label>
<div class="col-sm-10">
<input id="inputEmail3" class="form-control" type="email" value="{{ $account->email }}" disabled>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="inputUsername">Username</label>
<div class="col-sm-10">
<input id="inputUsername" class="form-control" type="text" value="{{ $account->username }}" disabled>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="inputname">name</label>
<div class="col-sm-10">
<input id="inputname" class="form-control" type="text" value="{{ $account->name }}" disabled>
</div>
</div>
{{ Form::close() }}
@stop</code></pre></noscript></div>
<p>這邊很簡單你要顯示的欄位資料就使用<code>-></code>這樣的方式操作,example: <code>$account->email</code></p>
<h2 id="section-1">修改帳號資訊</h2>
<p>編輯會呼叫到<code>AccountController.php</code>的<code>edit</code>方法,code如下</p>
<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>AccountController.php </span></figcaption>
<div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
</pre></td><td class="code"><pre><code class="php"><span class="line"> <span class="k">public</span> <span class="k">function</span> <span class="nf">edit</span><span class="p">(</span><span class="nv">$id</span><span class="p">)</span>
</span><span class="line"> <span class="p">{</span>
</span><span class="line"> <span class="nv">$account</span> <span class="o">=</span> <span class="nx">User</span><span class="o">::</span><span class="na">find</span><span class="p">(</span><span class="nv">$id</span><span class="p">);</span>
</span><span class="line">
</span><span class="line"> <span class="nv">$view</span> <span class="o">=</span> <span class="nx">View</span><span class="o">::</span><span class="na">make</span><span class="p">(</span><span class="s1">'account.edit'</span><span class="p">)</span>
</span><span class="line"> <span class="o">-></span><span class="na">with</span><span class="p">(</span><span class="s1">'account'</span><span class="p">,</span> <span class="nv">$account</span><span class="p">);</span>
</span><span class="line"> <span class="k">return</span> <span class="nv">$view</span><span class="p">;</span>
</span><span class="line"> <span class="p">}</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>
<p>這邊跟顯示的地方並沒有什麼不同!接著就來看<code>app/views/account/edit.blade.php</code>吧</p>
<div><script src="https://gist.github.com/f5984711c8d1a80d48fe.js?file=edit.blade.php"></script>
<noscript><pre><code>@extends('layouts.base')
@section('content')
<h1>Edit Account</h1>
{{ HTML::ul($errors->all()) }}
<!-- 1 -->
{{ Form::model($account, array('route' => array('account.update', $account->id), 'method' => 'PUT', 'class' => 'form-horizontal', 'role' => 'form')) }}
<div class="form-group">
{{ Form::label('email', 'Email', ['class' => 'col-sm-2 control-label']) }}
<div class="col-sm-10">
{{ Form::text('email', $account->email, ['class' => 'form-control']) }}
</div>
</div>
<div class="form-group">
{{ Form::label('username', 'Username', ['class' => 'col-sm-2 control-label']) }}
<div class="col-sm-10">
{{ Form::text('username', $account->username, ['class' => 'form-control']) }}
</div>
</div>
<div class="form-group">
{{ Form::label('name', 'Name', ['class' => 'col-sm-2 control-label']) }}
<div class="col-sm-10">
{{ Form::text('name', $account->name, ['class' => 'form-control']) }}
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
{{ Form::submit('Edit the Account!', array('class' => 'btn btn-primary')) }}
</div>
</div>
{{ Form::close() }}
@stop</code></pre></noscript></div>
<p>這邊大致上跟新增很像!唯一比較不一樣的是“(可以看到註解1的地方),這邊要指定更新的方法,<code>account.update</code>就是呼叫<code>AccountController</code>的<code>update</code>方法,並帶入<code>$account->id</code>帳號ID;還有設定<code>'method' => 'PUT'</code>,這是因為要符合<code>restful</code>。</p>
<p>接下來就來寫更新資料的<code>update</code>方法吧!code如下</p>
<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>AccountController.php </span></figcaption>
<div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
<span class="line-number">18</span>
<span class="line-number">19</span>
<span class="line-number">20</span>
<span class="line-number">21</span>
<span class="line-number">22</span>
<span class="line-number">23</span>
<span class="line-number">24</span>
<span class="line-number">25</span>
<span class="line-number">26</span>
</pre></td><td class="code"><pre><code class="php"><span class="line"> <span class="k">public</span> <span class="k">function</span> <span class="nf">update</span><span class="p">(</span><span class="nv">$id</span><span class="p">)</span>
</span><span class="line"> <span class="p">{</span>
</span><span class="line"> <span class="nv">$rules</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
</span><span class="line"> <span class="s1">'email'</span> <span class="o">=></span> <span class="s1">'required|email'</span><span class="p">,</span>
</span><span class="line"> <span class="s1">'username'</span> <span class="o">=></span> <span class="s1">'required'</span><span class="p">,</span>
</span><span class="line"> <span class="s1">'name'</span> <span class="o">=></span> <span class="s1">'required'</span>
</span><span class="line"> <span class="p">);</span>
</span><span class="line">
</span><span class="line"> <span class="nv">$validator</span> <span class="o">=</span> <span class="nx">Validator</span><span class="o">::</span><span class="na">make</span><span class="p">(</span><span class="nx">Input</span><span class="o">::</span><span class="na">all</span><span class="p">(),</span> <span class="nv">$rules</span><span class="p">);</span>
</span><span class="line">
</span><span class="line"> <span class="k">if</span><span class="p">(</span><span class="nv">$validator</span><span class="o">-></span><span class="na">fails</span><span class="p">())</span> <span class="p">{</span>
</span><span class="line"> <span class="k">return</span> <span class="nx">Redirect</span><span class="o">::</span><span class="na">to</span><span class="p">(</span><span class="s1">'account/'</span> <span class="o">.</span> <span class="nv">$id</span> <span class="o">.</span> <span class="s1">'/edit'</span><span class="p">)</span>
</span><span class="line"> <span class="o">-></span><span class="na">withErrors</span><span class="p">(</span><span class="nv">$validator</span><span class="p">)</span>
</span><span class="line"> <span class="o">-></span><span class="na">withInput</span><span class="p">(</span><span class="nx">Input</span><span class="o">::</span><span class="na">all</span><span class="p">());</span>
</span><span class="line"> <span class="p">}</span>
</span><span class="line"> <span class="k">else</span> <span class="p">{</span>
</span><span class="line"> <span class="nv">$account</span> <span class="o">=</span> <span class="nx">User</span><span class="o">::</span><span class="na">find</span><span class="p">(</span><span class="nv">$id</span><span class="p">);</span>
</span><span class="line"> <span class="nv">$account</span><span class="o">-></span><span class="na">email</span> <span class="o">=</span> <span class="nx">Input</span><span class="o">::</span><span class="na">get</span><span class="p">(</span><span class="s1">'email'</span><span class="p">);</span>
</span><span class="line"> <span class="nv">$account</span><span class="o">-></span><span class="na">username</span> <span class="o">=</span> <span class="nx">Input</span><span class="o">::</span><span class="na">get</span><span class="p">(</span><span class="s1">'username'</span><span class="p">);</span>
</span><span class="line"> <span class="nv">$account</span><span class="o">-></span><span class="na">name</span> <span class="o">=</span> <span class="nx">Input</span><span class="o">::</span><span class="na">get</span><span class="p">(</span><span class="s1">'name'</span><span class="p">);</span>
</span><span class="line"> <span class="nv">$account</span><span class="o">-></span><span class="na">save</span><span class="p">();</span>
</span><span class="line">
</span><span class="line"> <span class="nx">Session</span><span class="o">::</span><span class="na">flash</span><span class="p">(</span><span class="s1">'message'</span><span class="p">,</span> <span class="s1">'修改成功'</span><span class="p">);</span>
</span><span class="line"> <span class="k">return</span> <span class="nx">Redirect</span><span class="o">::</span><span class="na">to</span><span class="p">(</span><span class="s1">'account'</span><span class="p">);</span>
</span><span class="line"> <span class="p">}</span>
</span><span class="line"> <span class="p">}</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>