發表文章

iOS class 和 struct 的差異

這篇是整理一些 class 與  struck 差異文章,而且這個觀念在於面試時候也是一個特別喜歡問的問題。 而  class  與 struct 差異在哪裡,而我們會常看到所提出的點,大致是以下這三點:  struct 不能被繼承  struct 是 value type , class 是 reference type  struct 有 memberwise initializer   從下面一個例子來看 class A {     var number = 1 } var a = A () var b = a b . number = 2 這時候  a.number 和 b.number  都會是 2 當 var b = a 的這個時候是也將 a.number  也改變了 struct AA{     var number = 1 } var aa = AA () var bb = aa bb . number = 2 這個時候 aa.number 和 bb.number 個會是 1 和 2 而會有這個差異原因是, struct 是 value type 它不會去改變到其他值

[ iOS _ Swift 學習筆記 ] Dictionary 取值排序 (use Dictionary key value)

圖片
Swift DictionAry 取值排序 近期在開發專案的時候,遇到一個問題... 就是在取出 JSON 格式的物件時候,每一次取出來的時候是不會按照順序的, 因此在於資料的處理上就會變成,每次放的位置順序不一至。 所以在把拿到的 JSON 資料轉成物件存放記憶體後,再處理排序的問題。 解決方式是透過幫 Dictionary 排序來完成。 因此在快速 google 後參考了別人的文章後解決這個, Dictionary key 值排序的問題。 主要是透過以下這個方法  public func sorted(by areInIncreasingOrder: ((key: Key, value: value), (key: key, value: Value)) -> Bool ->[(key: Key, value: Value)] 這樣就能順利拿到排序好的  Dictionary 值了。 然後 Swift 3 和 Swift 4 的語法有變動。 因此在 firstKeyRealValue 和 second KeyRealValue   會和參考的文章有所不同。 參考資料來源 Developmnt of the app have a question. When i use JSON get objuct; Every time can't get same  order. So dispose data  first need get JSON data change objuct put in memory and  second solve order. But i get solve question means is use Dictionary. so i goole other people solve. Use Dictionary key value solve.  public func sorted(by areInIncreasingOrder: ((key: Key, value: value), (key: key, value: Value)) -> Bool ->[(ke...

iOS_開發 拿到 Tableview Cell 上的按鈕是哪一個 (Tableview Cell Button)

圖片
近期在開發 iOS App 時候使用到, tableview 而且在我的 tableview 上面會有 一個 Button 和一個 ImageView, 當我點選到圖案時會外跳出一個新的 ViewController 按下 Button 可以類似 加到我的最愛的功能。 這時候就是需要,去知道現在點到的是哪一個 tableview Cell,  一開始的想法是 透過 didSelectRowAt 來看到點選是哪一個 cell   (但這個是無法成功的) 因此在網路上查了資料。 學習到 可以透過 寫自己的 Protocol 來用自己的 delegate 來完成 首先開啟專案與一般的 tableview 一樣, 然後在 cellForRowAt 這個一個方法 要多添加一個 cell.delegate = self 然後再寫一個自己的  Protocol 這裡我們取名,SwiftTableViewDelegate, 這裡面有一個 func 來告訴我們按到哪一個 cell上的按鈕。 接下來在cell的那個 Class 裡面, 把 cell 按下去的按鈕 Action  添加我們剛才的 delegate 最後我們在這個 TableViewController 裡面添加這個自己的delegate 就可以透過這個自定義的方法拿到 目前點選到哪個cell 的 button  參考網頁: Swift: Using Protocols to Add Custom Behavior to a UITableViewCell

iOS _ 閉包 ( Closures )

圖片
Closures 的學習筆記 Closures 和 Function 的功能很相似,而從 Closures 就像似一個沒有名稱的 Function, 所以 Closures 可以定義一段程式碼,也可以接受參數和回傳資料。 然而以下是兩者之間的差異! 首先在 Apple Closures的語法是 { ( parameters ) -> ( return type)  in   ( statements ) } 從兩者的格式來看就能更清楚, Function func 方法名 (參數一,餐數二) -> 回傳值 {    程式碼區域  } Closures { (參數一, 參數二) -> 回傳值 in  程式碼區域 } 從這兩個格式來看, Function 把前面的方法名稱拿掉, 然後把參數和回傳型別拿到大括弧內 但 Closures 沒辦法像 Function 可以單獨定義, 因此必須指派為 變數 或是 常數 或 當作參數傳入 Function ( 將 Closures 指派為常數 ) ( 將 Closures 指派當做參數傳入 Function ,而這個也是最常看到的用法) 通常如果沒有重覆需要呼叫需求時 就 closures 來處理, 在執行方法後要立即執行其他事情時使用, ( 例如 網路下載資料後,去更新呈現的畫面內容 ) 以上是基本的 Closures 的 基本寫法。 接下來是 Closures 的簡寫,這個也是常常每個不同專案較長看到的。 當 Closures 是 Function 的最後一個參數的時候, 可以 移除 Function 中 Closures 的『 參數 』和『 冒號 』, 然後最後的『 小括號 』 移到前面 。 如同上面的是 簡寫 過的方式 birthday(month: 3, day: 1 ) { ( ) -> String in    return " Happy Birthday " }...

iOS 生命週期 ( iOS ViewController Life )

生命週期主要是以下幾個: viewDidLoad :  view被載入記憶體時候,但畫面未被顯示之前,就會呼叫viewDidLoad 這時候我們會在這個時候 override 方法來增加對 view 的初始化。 viewWillAppear: 這個方法是當在 view 將呈現在畫面,且還沒有任何動畫呈現在畫面上的時候被呼叫。 可透過 overriding 這個方法來執行與 view 關聯的自定義任務。 ( 例如: 透過這個 viewWillAppear 把 status bar 樣式方向或樣式改變,改變 status bar 將在 view 呈現的樣式) viewDidAppear: 這個是在viewWillAppear 後,即 view  載入 view controller 後,就會載入這個方法。 可以透過 overriding 這個方法來增加任務到已呈現的 view   viewWillDisappear: 當 view 被移除前,且動畫開始執行前所呼叫的。 這時候可以透過 overriding 這個方法來改變 view 的各種狀態。 (例如: 可以把改變的 status  bar 改回原來) viewDidDisappear: 當 view 被移除後。

iOS - UIView的 clipsToBounds 筆記

UIView 的  clipsToBounds 屬性 今天在專案看到 cliosToBounds 的這個屬性  self.taBar.clipsToBounds = true 這個 cliosToBounds 屬性是決定子視圖的範圍,而這個預設值是 true 假設: 有個圖是A為父類別 和 B是子類別,而子類別父類別圖還要大。 因此,也就是說當值為 true 的時候 子類別的視圖如果超過父類別的視圖的時候,會被裁切到和父類別一樣。 而如果設定是 false  時候,那麼子類別的視圖會不被父類別圖的影響呈現出來。

iOS - ScrollView的學習筆記

圖片
ScrollView的學習筆記 這個ScrollView的元件是到了公司後,因為需求關係而找資料來所學習的。 在用這個元件的時候的確很奇妙也摸索了一陣子,在找方法把它加到storyboard裡面。 看了很多參考資料,總結出一句最簡單的用法 就是 ScrollView 不用設定寬高,透過裡面的 View 的寬高來把它撐出來。 ScrollView在設置的時候,Constrain 只用設計貼齊螢幕而在寬高的部分不用進行設定,只需要透過裡面的view  設定高度 然後在 設定 scrollView 的寬與 view 的寬一樣。 這麼一來上面出現的紅色就可以解決了! 讓我們圖解來看一下 首先,我先把 ScrollView 放在畫面上然後依照需求來設定 ( 在於 ScrollView 的寬高不要去進行設定 ) 接下來把我們要的View放上去, 只需要設定高度就好(而這個高度就依照個人需求設置) 最後再把在把 ScrollView 設定與我們的View 同寬(Equal Widths),那麼出現的紅字出錯就會消失了。