Zoe Liauh

#100daysofswift #side_project #storyboard #BMI

  • navigation bar 的長寬高是固定的,不可做更動。拉到 storyboard 後,開始設定 constrain → 建立相對應的 IBOutlet / IBAction → 回到 storyboard 連連看。這是 storyboard 建立的三步驟。
  • navigation bar: 通常在視窗的最上方,主要組成右邊的 back bottom, 中間的 title, 和左邊的 optional bottom。

--

--

#100daysofswift #Multithreading #Grand_Central_Dispatch

Stanford — Developing iOS 11 Apps with Swift — 10. Multithreading and Autolayout
  • multithread (多線程): 是個非常實用、直接的概念。它可以讓我們有效率的同時計算/執行。
  • multithread 的存在是因為當使用者點選的時候,我們希望 UI 可以有立即性的反應,而不是延遲或當機。
  • 在 iOS 裡,multithread 使用 queue 來工作,而組成這些 queue 的通常是 closure,有兩種 queue:第一種:serial queue,也就是程式一個一個接續處理,第二種:concurrent queue:程式可以同時處理多個,當開始處理時,可以再繼續接續處理。
  • UI 運作在一個 serial queue 上,我們稱為 main queue,也是唯一一個可以放置程式碼去處理 UI 相關的 queue;而非 UI 相關的但要處理的程式碼的 queue,我們可以放在 global queue,是一個 concurrent queue。

--

--

#100daysofswift #animation

  • Animation 已經發生之後的改變:Model 改變 -> View 改變 -> Animation 執行在 user 眼前。
  • Animation 只在 View 下工作,且是已經存在在畫面上的。可以針對 view 整體做動畫;或是對動畫下的參數 (view modifiers) 做動畫,例如:opacity, rotation…;或是可以製作形狀 (shape)。
  • 兩種方法開始製作動畫:1. implicit animation: 程式碼為 .animation(),較不常使用; 2. explicit animation: 程式碼為 withAnimation {…},較常使用。
  • implicit animation: 稱為 ” Automatic animation”,必須在 View 下使用,宣告 View 是一個動畫,其 View 下面的 ViewModifier arguments 執行動畫。

--

--

#100daysofswift #collection_types #array #dictionary #set

  • 集合型別 ( collection type ):和 Tuple 一樣可以儲存多個物件,不同的是,collection type 可以做更改,且可以永久儲存,swift 主要有三種集合物件:array, set, dictionary,以下會分別作介紹。
  • 先說明一下 array, set, dictionary 分別的差異:array 是一個有順序性的集合物件,set 和 dictionary 沒有順序性,set 是不可有重複的儲存值,dictionary 利用 key, value 儲存,所以 value 有相對應的 key,key 不可以重複,但 value 可以重複。
  • array : 利用 var 可以建立空集合、或建立有預設值的陣列、或是使用純值表示法建立陣列。array 表示法有:一般表示法:Array<String>,簡易表示法:[String],array 是一個有順序性的集合型別,故可以用索引方式取值,順序分別為:0, 1, 2, 3…。利用 for…in 抓取值,範例如截圖。

--

--

#100daysofswift #properties

  • Properties (屬性) : 有分為:儲存屬性 ( Stored Properties )、計算屬性 ( Computed Properties )、( Type Properties ) 型別屬性。
  • 儲存屬性:儲存在特定類別或結構的實例裡的一個變數 ( var ) 或是一個常數 ( let ),變數可以改變,常數則無法任意更動,但如果常數是在 class 型別下作定義,則可以更動。
  • Lazy Stored Properties (延遲儲存屬性): 指的是其初始值的屬性會在第一次呼叫後才做計算,會用 @lazy 在屬性之前做宣告,且必須是變數。延遲屬性適合用於複雜或是需要大量計算,或是在建構完成前 無法得知的情況下。
  • 計算屬性:不直接儲存值,而是提供一個 getter 來獲取值,一個可選的 setter 來間接設定其他屬性或值。
  • Shorthand Setter Declaration ( 便捷 setter 宣告 ):如果一個計算屬性的名稱沒有被定義,預設名稱為:newValue。
  • Read-Only Computed Properties ( 唯讀計算屬性 ):即只有 getter 沒有 setter 的計算屬性,總是回傳一個值。
  • 型別屬性:型別屬性用於定義特定型別所有實例共享的資料,
  • Property Observers (屬性監視器):屬性監視器發生在每一個數定值設定的時候,即使新的設定值,和目前的值一樣。屬性監視器可以加在以下幾個地方:定義的儲存屬性、繼承的儲存屬性、繼承的計算屬性。(需要更深入了解,之後再補充)。
  • willSet : 在值被儲存之前呼叫。
  • didSet : 在新值被儲存後,立即被呼叫。

--

--