Với các bạn làm iOS thì chắc đã quá quen thuộc với việc update các phiên bản mới nhất của iOS, swift, xcode. Trong bài viết này chúng ta sẽ cùng tìm hiểu về những điểm mới trên Swift 5.3 – verison mới nhất của ngôn ngữ Swift.
Nào chúng ta cùng tìm hiểu nhé!
1 2 |
Multi-pattern catch clauses
Ở version swift này chúng ta đã có thể thực hiện bắt được nhiều trường hợp lỗi bên trong quá trình xử lý lỗi giúp chúng ta hạn chế được rất nhiều trùng lặp.
Ví dụ: Khi xử lý việc bắt lỗi về nhiệt độ trong đoạn code dưới đây:
1 2 3 4 | <span class="token keyword">enum</span> <span class="token builtin">TemperatureError</span><span class="token punctuation">:</span> <span class="token builtin">Error</span> <span class="token punctuation">{</span> <span class="token keyword">case</span> tooCold<span class="token punctuation">,</span> tooHot <span class="token punctuation">}</span> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <span class="token keyword">func</span> <span class="token function">getReactorTemperature</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token builtin">Int</span> <span class="token punctuation">{</span> <span class="token number">90</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">checkReactorOperational</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token builtin">String</span> <span class="token punctuation">{</span> <span class="token keyword">let</span> temp <span class="token operator">=</span> <span class="token function">getReactorTemperature</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">if</span> temp <span class="token operator"><</span> <span class="token number">10</span> <span class="token punctuation">{</span> <span class="token keyword">throw</span> <span class="token builtin">TemperatureError</span><span class="token punctuation">.</span>tooCold <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> temp <span class="token operator">></span> <span class="token number">90</span> <span class="token punctuation">{</span> <span class="token keyword">throw</span> <span class="token builtin">TemperatureError</span><span class="token punctuation">.</span>tooHot <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token string">"OK"</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
1 2 3 4 5 6 7 8 9 | <span class="token keyword">do</span> <span class="token punctuation">{</span> <span class="token keyword">let</span> result <span class="token operator">=</span> <span class="token keyword">try</span> <span class="token function">checkReactorOperational</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"Result: <span class="token interpolation"><span class="token delimiter variable">(</span>result<span class="token delimiter variable">)</span></span>"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token builtin">TemperatureError</span><span class="token punctuation">.</span>tooHot<span class="token punctuation">,</span> <span class="token builtin">TemperatureError</span><span class="token punctuation">.</span>tooCold <span class="token punctuation">{</span> <span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"Shut down the reactor!"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">{</span> <span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"An unknown error occurred."</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> |
Multiple trailing closures
Chúng ta cùng quan sát hai cách viết dưới đây để thấy rõ trên swift 5.3 mọi thứ trở lên đơn giản và rõ ràng hơn
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token keyword">struct</span> <span class="token builtin">OldContentView</span><span class="token punctuation">:</span> <span class="token builtin">View</span> <span class="token punctuation">{</span> @<span class="token builtin">State</span> <span class="token keyword">private</span> <span class="token keyword">var</span> showOptions <span class="token operator">=</span> <span class="token boolean">false</span> <span class="token keyword">var</span> body<span class="token punctuation">:</span> some <span class="token builtin">View</span> <span class="token punctuation">{</span> <span class="token function">Button</span><span class="token punctuation">(</span>action<span class="token punctuation">:</span> <span class="token punctuation">{</span> <span class="token keyword">self</span><span class="token punctuation">.</span>showOptions<span class="token punctuation">.</span><span class="token function">toggle</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">Image</span><span class="token punctuation">(</span>systemName<span class="token punctuation">:</span> <span class="token string">"gear"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token keyword">struct</span> <span class="token builtin">NewContentView</span><span class="token punctuation">:</span> <span class="token builtin">View</span> <span class="token punctuation">{</span> @<span class="token builtin">State</span> <span class="token keyword">private</span> <span class="token keyword">var</span> showOptions <span class="token operator">=</span> <span class="token boolean">false</span> <span class="token keyword">var</span> body<span class="token punctuation">:</span> some <span class="token builtin">View</span> <span class="token punctuation">{</span> <span class="token builtin">Button</span> <span class="token punctuation">{</span> <span class="token keyword">self</span><span class="token punctuation">.</span>showOptions<span class="token punctuation">.</span><span class="token function">toggle</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> label<span class="token punctuation">:</span> <span class="token punctuation">{</span> <span class="token function">Image</span><span class="token punctuation">(</span>systemName<span class="token punctuation">:</span> <span class="token string">"gear"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Synthesized Comparable conformance for enums
Với Comparable chúng ta có thể sử dụng các phép so sánh <, > và = để so sánh các instance của enum:
1 2 3 4 5 6 7 | <span class="token keyword">enum</span> <span class="token builtin">Size</span><span class="token punctuation">:</span> <span class="token builtin">Comparable</span> <span class="token punctuation">{</span> <span class="token keyword">case</span> small <span class="token keyword">case</span> medium <span class="token keyword">case</span> large <span class="token keyword">case</span> extraLarge <span class="token punctuation">}</span> |
1 2 3 4 5 6 7 | <span class="token keyword">let</span> shirtSize <span class="token operator">=</span> <span class="token builtin">Size</span><span class="token punctuation">.</span>small <span class="token keyword">let</span> personSize <span class="token operator">=</span> <span class="token builtin">Size</span><span class="token punctuation">.</span>large <span class="token keyword">if</span> shirtSize <span class="token operator"><</span> personSize <span class="token punctuation">{</span> <span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"That shirt is too small"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> |
self is no longer required in many places
Version swift này cho phép chúng ta ở một số trường hợp không cần viết seft nếu trước đây sẽ bị báo error, chúng ta cùng xem ví dụ sau:
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token keyword">struct</span> <span class="token builtin">OldContentView</span><span class="token punctuation">:</span> <span class="token builtin">View</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> body<span class="token punctuation">:</span> some <span class="token builtin">View</span> <span class="token punctuation">{</span> <span class="token function">List</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token operator"><</span><span class="token number">5</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> number <span class="token keyword">in</span> <span class="token keyword">self</span><span class="token punctuation">.</span><span class="token function">cell</span><span class="token punctuation">(</span><span class="token keyword">for</span><span class="token punctuation">:</span> number<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">cell</span><span class="token punctuation">(</span><span class="token keyword">for</span> number<span class="token punctuation">:</span> <span class="token builtin">Int</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> some <span class="token builtin">View</span> <span class="token punctuation">{</span> <span class="token function">Text</span><span class="token punctuation">(</span><span class="token string">"Cell <span class="token interpolation"><span class="token delimiter variable">(</span>number<span class="token delimiter variable">)</span></span>"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
chúng ta không cần viết self.cell nữa mà thay vì đó cell là đủ:
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token keyword">struct</span> <span class="token builtin">NewContentView</span><span class="token punctuation">:</span> <span class="token builtin">View</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> body<span class="token punctuation">:</span> some <span class="token builtin">View</span> <span class="token punctuation">{</span> <span class="token function">List</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token operator"><</span><span class="token number">5</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> number <span class="token keyword">in</span> <span class="token function">cell</span><span class="token punctuation">(</span><span class="token keyword">for</span><span class="token punctuation">:</span> number<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">cell</span><span class="token punctuation">(</span><span class="token keyword">for</span> number<span class="token punctuation">:</span> <span class="token builtin">Int</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> some <span class="token builtin">View</span> <span class="token punctuation">{</span> <span class="token function">Text</span><span class="token punctuation">(</span><span class="token string">"Cell <span class="token interpolation"><span class="token delimiter variable">(</span>number<span class="token delimiter variable">)</span></span>"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Type-Based Program Entry Points
Chúng ta có thuộc tính main và chúng ta sẽ không cần tạo instant sau đó mới call method mà call trực tiếp như dưới đây:
1 2 3 4 5 6 7 8 9 | <span class="token keyword">struct</span> <span class="token builtin">OldApp</span> <span class="token punctuation">{</span> <span class="token keyword">func</span> <span class="token function">run</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"Running!"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">let</span> app <span class="token operator">=</span> <span class="token function">OldApp</span><span class="token punctuation">(</span><span class="token punctuation">)</span> app<span class="token punctuation">.</span><span class="token function">run</span><span class="token punctuation">(</span><span class="token punctuation">)</span> |
thay vào đó sẽ là
1 2 3 4 5 6 7 | @main <span class="token keyword">struct</span> <span class="token builtin">NewApp</span> <span class="token punctuation">{</span> <span class="token keyword">static</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"Running!"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Kết luận
Swift 5.3 đã bổ sung một số thuộc tính khá thú vị, ngôn ngữ Swift ngày càng hoàn thiện hơn, dễ dàng và gọn hơn.
Cám ơn bạn đã dành thời gian cho bài viết!
Nguồn:
https://www.hackingwithswift.com/articles/218/whats-new-in-swift-5-3