Swift

掘金發表於2017-12-21

Swift iOS : 字型圖示

厭倦了使用點陣圖在xcode的Assets.xcassets內,因為麻煩,包括如下的麻煩: 找圖 圖需要分尺寸 需要操作員類似工作去管理 然後,現在有了字型圖示,就方便多了: 比較成熟的幾套庫,用名字就可以查 向量圖,尺寸無極縮放,想要多大都行 都在程式碼和字型檔案內,不需要在工程…

Swift iOS : Archive

Archive 想把物件序列化到檔案,可以首先令此物件符合 NSCoding 協議,然後使用歸檔類完成序列化。 如下案例,可以把物件 User 序列化到檔案內: import UIKit @UIApplicationMain class AppDelegate: UIResponder…

Swift iOS : 建立一個POD

廣告 Swift iOS開發小書 ,幫你快速上手開發 http://www.ituring.com.cn/boo… 正文 你建立了一個迷幻的View,想要向全世界共享它。怎麼辦?cocoapods可以幫忙。 ##建立一個工程,其中有你需要分享的程式碼 首先,我們建立這樣的…

Swift iOS : 定製Cell

TableViewCell提供了種種定製的可能,包括textLabel,detailLabel,各種訪問附件等。但是需要死記硬背,何必呢,反正一個繼承了UITableViewCell的子類,然後在其內加入自己的定製View其實並不複雜,並且使用了同樣的加入subView的方案。因…

Swift iOS : 顯示SVG檔案的方法

SVG檔案是向量圖示準之一,特點是可以縮放,並且可以用可以閱讀的原始碼的方式(而不是二進位制)來儲存圖形資訊。比如如下檔案就是一個svg檔案: <svg xmlns=”http://www.w3.org/2000/svg&quot; viewBox=”0 0 350 100″> <defs>…

Swift iOS : 在webview的當前網頁上提取資訊的方法

廣告 Swift iOS開發小書 ,幫你快速上手開發 http://epub.ituring.com.cn/946 正文 使用UIWebView裝載一個網頁後,可能需要提取其內的資訊,比較好的方法是使用JavaScript。方法UIWebView.stringByEvaluati…

最小的Swift App

如何通過通過純粹的程式碼,而不依賴於Xcode的StoryBoard,來完成一個App? 首先做些操作性的工作,具體過程是這樣的: 開啟xcode 建立一個Single View App Xcode會進入主要編輯介面。此時,我們開啟AppDelegate.swift檔案然後覆蓋源…

Swift iOS : CocoaPods

CocoaPods是一個iOS專案的依賴管理器,使用它可以讓匯入第三方庫和處理依賴關係變得簡單。 出於測試和驗證的目的,這裡會建立一個Swift工程,並採用CocoaPods匯入第三方HTTP庫alamofire。 準備CocoaPods CocoaPods需要系統內已經安裝了…

Swift iOS : StackView 詳解

StackView 有很多佈局可以使用橫向佈局和縱向佈局來組合完成,此種情況下,可以使用 UIStackView 來簡化建立佈局。 假設我們想要橫向佈局 3 個標籤,標籤之間有邊距的話,可以這樣: import UIKit @UIApplicationMain class AppDel…

Swift iOS : 解決了一個委託不工作的情況

在解決一個遺產程式碼的過程中,我希望對UIAlertView稍作封裝,以便從巨大的ViewController內分離出特定的AlertView的程式碼,我這樣做的: import UIKit @UIApplicationMain class AppDelegate: UIRespon…

Swift iOS : RichText

我們常常看到簡單平實的文字顯示,然後確實可以通過 RichText 來完成豐富文字的外觀,增強介面的表達力。 UILabel 等元件,除了 text 屬性外,還有 attributedText 屬性,通過構建 NSAttributedString 的例項,並賦值給此屬性,就可以設定 RichTex…

Swift iOS : YYText計算文字佔用高度

使用動態文字填充UITableViewCell內容時,需要計算文字佔用高度,以便告知UITableViewCell的行高。使用YYText的YYTextLayout可以幫助做到這點。 如下案例,簡單封裝了YYTextLayout,並通過兩個案例呼叫,演示它的做法: import…

Swift iOS : CocoaPods

CocoaPods是iOS最常用最有名的框架依賴管理工具。但是使用過程也是憑空的一波三折的,because I Love China。 首先你需要ruby環境。 $ruby -v ruby 2.0.0p648 (2015-12-16 revision 53162) [unive…

Swift iOS : 使用Cartography佈局

廣告 Swift iOS開發小書 ,幫你快速上手開發 http://www.ituring.com.cn/boo… 正文 使用SnapKit佈局當然不錯,但是我覺得Cartography更好,因為可以寫出更加規整的佈局程式碼。表示式總是比起鏈式函式容易閱讀。 依然是佈局三…

Swift iOS :我的這5個月的學習過程

2015年,我也去看了下objc,第一感覺很不好,C語言和objc的擴充套件在一起,特別混亂,當時感覺: 都是函式,C的函式和objc的函式建立和使用差別很大,並且混合在一起 objc函式帶著引數標籤的,函式長的受不了 即使是第一步最小的app,也得了解設計模式,它一開始就出場,叫做…

Swift iOS : 本地化

這篇文章大概是目前你可以看到的最簡單的本地化教程。 廣告 Swift iOS開發小書 ,幫你快速上手開發 http://epub.ituring.com.cn/946 目標 本地化的意義,在於iOS切換不同語言時,App可以隨同改變,用指定的語言顯示應用。iOS提供了一套用來國際…

Swift iOS : attributedText 富文字操作

廣告 Swift iOS開發小書 ,幫你快速上手開發 http://www.ituring.com.cn/boo… 正文 通常給UILabel設定文字,我們都是設定屬性UILabel.text。這意味著顯示的文字是單一的,整個文字只能有一種同樣的文字效果。而另外一個屬性…

Swift iOS : tintColor

在iOS 7後,UIView新增加了一個tintColor屬性,這個屬性表示的是“色調”,一旦設定顏色給它,那麼以此檢視為根檢視的整個檢視層次結構都會被修改顏色。從而可以不必一一賦值就可以在檢視體系內得到一致的顏色體系。 如下程式碼當點選RUN按鈕時,整個以self.view為根視…

Swift iOS:AutoLayout 快速介紹

AutoLayout 典型的,加入一個子檢視的做法就是建立例項,指定位置,然後把它加入到檢視裡面來。在指定位置的程式碼處,一般就是設定 frame 屬性即可,就像這樣: import UIKit @UIApplicationMain class AppDelegate: UIResp…

Swift iOS:SnapKit

iOS預設提供的佈局技術強大而愚蠢。幸好有一個封裝的包SnapKit,可以讓佈局變得容易閱讀和修改。 假設要在一個UIViewController上佈局兩個label,要求是: 第一個label的xy距離父檢視為5,100 第二個label 的x距離第一個label為10,高度…

Swift iOS : 一個簡陋的TableView封裝

UITableView功能強大,但是使用delegate設計模式的DataSource真的很不舒服。比如說: 一堆冗長的函式簽名 只能拷貝,錯一點都無法執行的,也不會提示你不對 冗長的函式簽名是這樣的: func numberOfSections(in: UITableView…

Swift_iOS: 掃描二維碼的方法

可以使用AVFoundation框架來啟動相機掃描二維碼,把一個二維碼轉換為一個字串。 如下應用,進入首頁看到一個按鈕和一個標籤。點按鈕的話,會觸發一次掃描,把掃描到的二維碼轉換為字串後,會顯示在標籤內。程式碼如下: import UIKit @UIApplicationMai…

Swift iOS : 訪問自簽名證照https伺服器

訪問HTTPS伺服器時,可以使用自簽名證照的、在本地的https伺服器,對於除錯應用是非常方便的。 Apple已經在iOS 9版本要求必須使用https。如果https伺服器是CA簽署的證照,那麼一路綠燈,如果是自簽名證照,就需要做兩個額外的工作: 在info.plist內加入…

Swift iOS : 內建的下拉重新整理

對TableView,下拉重新整理新的資料是很方便的。iOS內建有一個下拉重新整理控制元件UIRefreshControl,雖然不能做上拉重新整理,但是因為使用簡單,倒也值得介紹。 如下程式碼,使用TableView載入OS列表,每次下拉,都模擬重新整理一條新的OS專案: import UIKit @…

Swift iOS : 閉包的一個應用

我閱讀一個開原始碼的過程中,常常發現有這樣的結構: var textLabel:UILabel = { let label = UILabel() label.backgroundColor = .red return label }()功能能夠編譯,能夠執行,因此語法當然是對的…

Swift iOS : 裝入webview時,如何讓圖片都顯示在螢幕內

webview裝入的網頁,常常有幅面比較的圖,這些圖會超出手機的寬度,因此導致顯示不完整。 比如如下案例,加入了兩個圖片,大小分別為: 650×300 150×150在iPhone SE的模擬器下,預設情況下,前一張圖會在寬度上超出,後一張可以顯示完整。 import UIKit…

Swift iOS:KVO

KVO是Key Value Observer的縮寫,可以用於監視一個物件的屬性值變化,然後執行一個程式碼塊(塊、函式、閉包等)。Facebook開源了一個KVO框架,KVOController。 這個案例使用KVOController,用於App主題改變通知。通過KVO監視主題的…

Swift iOS :  剿除編譯耦合的一種方法

我們常常會需要把多個類耦合在一起以便共同完成一個或者一組功能。但是同時也意味著其中單獨的類因為依賴了其他的類,當被轉移到其中工程中就會無法無法編譯通過,更加談不上執行了。比如如下的案例的幾個類就是完全的膠合在一起: import UIKit @UIApplicationMain…

Swift iOS : 如果Cell內部有webview怎麼自適應呢

Cell高度自適應的問題真多。現在,如果內部有webView,內容動態裝入,大小也是各不相同的,並且高度必須根據內容,而不是view本身的高度來適應,怎麼辦呢?特別是如果有多個webView的情況下。 這樣就可以了: import UIKit @UIApplicationMain…

Swift iOS : 上拉重新整理或者下拉重新整理

框架 MJRefresh 提供了上拉重新整理或者下拉重新整理,非常的喜聞樂見。 需要使用 pod: target `Swift-MJrefresh` do use_frameworks! # Pods for Swift-MJrefresh pod `MJRefresh` end 記得去執行命…

Swift iOS : 解析 ISO8601 日期字串的方法

日期時間常常需要以字串形式打包到JSON內,常用的字串格式為ISO8601,格式卡起來是這樣的: “2016-06-05T16:56:57.019+01:00″解析它的關鍵,是使用DateFormater的時候,寫好格式化字串,內容為: dateFormatter.date…

Swift iOS : self sized cell

根據Cell內的內容,動態調整Cell高度,是常用的技術。在iOS 8 或者以上的版本內,這個技術不再需要自己計算行高,而是變得簡單無比。 如下案例,假設一個Cell內有兩個Label,其中一個單行,第二個多行,根據第二個Label的內容的不同,高度也會不同,這個高度的變大,會導…

Swift iOS : 自動閉包autoclosure

如下為官方文件的定義,但是建議你忽略它,搞懂了自動閉包再來看才容易懂:) 自動閉包是一種自動建立的閉包,用於包裝傳遞給函式作為引數的表示式。這種閉包不接受任何引數,當它被調 用的時候,會返回被包裝在其中的表示式的值。這種便利語法讓你能夠省略閉包的花括號,用一個普通的表示式 來代替…

Swift iOS : 建立一個framework

Swift支援程式碼按物理模組分割組織,分而治之。其中的一個做法就是在你的工程中使用framework。 本文建立一個最簡單framework。 首先建立一個framework工程。步驟為: 建立工程 選擇iOS | Framework & Library | Cocoa Tou…

Swift iOS : 模糊化

iOS的模糊化,會讓介面很炫酷,用了不能停。本案例使用了FXBlurView,對圖片進行模糊處理。 使用Pod檔案: target `five` do use_frameworks! pod `FXBlurView`, `~> 1.6.4` end然後執行pod install…

Swift iOS : 訪問 https 伺服器

使用 URLSession 可以訪問 https 伺服器。為了測試方便,省下自己編寫 https 伺服器的麻煩,可以使用一個網路服務叫做 httpbin.org/ip, 當訪問子 URL 時,它會返回一個 json,格式為: {origin = “221.237.156.243”;} 訪問 http…

Swift 訪問 sqlite,最快的上手案例

可以使用 sqlite 作為關聯式資料庫來儲存 iOS 本地資料。這意味著,通過 sql 語言方便的做資料的增刪改查。 sqlite 本身提供了 C 語言的 API,使用 Swift 訪問需要 建立一個橋接檔案,引入 C API,訪問 SQLite 資料庫需要使用 SQLite 官方提供的 C 語言風格的 API,所以…

Swift iOS : plist

plist plist是一個XML的子集,使用UTF-8編碼的文字檔案,它的根節點是一個字典,內容由多個主鍵和值構成。常常用來儲存App的配置資訊。 可以直接使用NSDictionary類直接儲存它的內容到plist內,比如這樣: import UIKit @UIApplica…

Swift iOS : cnodejs api 測試

cnodejs允許使用它提供的api來開發客戶端。並且提供了文件。為了測試和驗證api,可以使用curl命令來做此事。有了這些命令集合,開發和研究api變得更加容易。如下就是這些可以執行的文件。 釋出主題: curl –data “tab=dev&title=title&con…

Swift iOS : 解析json

典型的前臺後臺的互動操作,幾乎都是這樣的: 訪問後臺服務API 然後解析它返回的JSON 使用Alamofire,它的擴充套件AlamofireObjectMapper可以把HTTP訪問獲得的結果轉換為json物件,使用ObjectMapper可以把json物件和swift物件做一個…

Swift iOS : 編譯器的智慧

廣告 Swift iOS 小書 http://www.ituring.com.cn/boo… 正文 編輯程式碼時,不小心弄錯了,卻意外的發現,這樣的程式碼是可以編譯通過和執行的: @UIApplicationMain class AppDelegate: UIRespon…

Swift iOS : YYText顯示微博@文字的方法

廣告 Swift iOS開發小書 ,幫你快速上手開發 http://www.ituring.com.cn/boo… 正文 第三方庫YYText可以完成富文字的輸入,如果需要建立類似微博@一樣的輸入UI,可以使用它的YYTextView元件。具體說: 當內容中有@打頭的文…

Swift iOS : KeyChain

廣告 Swift iOS開發小書 ,幫你快速上手開發 http://www.ituring.com.cn/boo… 正文 KeyChain提供了加密儲存敏感資訊的方法。所謂的敏感資訊,不外是密碼,信用卡號等。如果一個物件含有敏感資訊,也可以把整個物件序列化為Data,然…

Swift iOS : WebView快取圖片的方法

廣告 Swift iOS開發小書 ,幫你快速上手開發 http://www.ituring.com.cn/boo… 正文 每次載入WebView內容,如果圖片可以快取的話,速度就會非常快。預設情況下,WebView自己來載入圖片,快取的策略也是自己定的。如想要自己快取的…

Swift iOS : Core Data

Core Data是官方對Sqlite訪問的封裝框架。使用它的好處是: 不需要自己引入Sqlite動態庫和建立橋接檔案 不需要使用SQL語言即可訪問Sqlite 使用它的首要需求是引入它,像是這樣: import CoreData依然假設我們的問題是儲存todo專案,欄位…

Swift iOS : #selector

老版本的Swift(小於2.2),想要給Button一個事件的話,需要用到Selector函式,像是這樣: import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate …

Swift iOS : 擴充套件類的屬性

extension可以為類新增新的方法,但是如果想要新增資料成員的話就會被阻止,比如如下程式碼: extension Foo { var _title: String? var title: String? { get { return _title } set { _title …

Swift iOS : 根據內容調整Cell高度的方法

有時候,需要動態調整UITableView的Cell高度,比如內部有一個TextView,內容由使用者決定,可長可短的情況下,肯定是希望Cell和TextView可以展示全部內容,因此也需要Cell高度也跟著同步越高了。 如下程式碼,展示一個長度變化的TextView,當內容變化時…

Swift iOS : NotificationCenter

類NotificationCenter提供了一種輕耦合的訊息傳遞機制。可以發起一個通知,在多處監聽此通知。比如說一個App的主題樣式被修改,就可以通過此類來通知多個相關UI,做響應的處理。 如下案例展示了這種可能: import UIKit @UIApplicationMain …

Swift iOS: View 詳解

View 檢視類 UIView 定義了一個矩形區域,並且管理此使用者介面內的互動。檢視可以管理子檢視,全部子檢視和自身檢視一起,構成一個層次化的檢視樹。 我們完成一個案例,程式碼可以建立兩個 50 見方的矩形,它們並排在一起,並且還有第三個檢視,它嵌入在第二個檢視內。三個檢視的背景色分別為…

詳解 View Controller

類 UIViewController,它被稱為檢視控制器,被用來裝入和釋放檢視、管理檢視互動、並且和其他檢視控制器一起協作完成整體的 App 介面。為了術語一致,後文會直接使用它的英文名:View Controller。 View Controller 管理一個檢視層級體系。比如在一個…

Node.js: 一個剛剛夠用的 HTTPS 伺服器

有時候,需要建立一個https伺服器,以便測試使用。使用node.js完成此項工作還是比較簡單的。另外,為了可以建立https,需要openssl工具棧。 首先建立證照: openssl genrsa -out key.pem openssl req -new -key key…

git : 修正HEAD detached狀態

有時候發現當前程式碼修改的不對了,想要回溯到前些版本,多次checkout查詢合適版本時,會發現當前處於這樣的狀態; (HEAD detached from REVISION-ID)如果此時做了修改,那麼可以使用如下命令合併修改到主分支: git branch temp git c…

Swift iOS : @escaping 屬性

使用閉包,有兩種情況,一種是在呼叫者完成前閉包就被執行完成了。還有一種則相反:呼叫函式完成了,但是閉包還沒有被呼叫或者沒有被完成。後者被稱為逃逸閉包。 所有網路請求的函式,在完成呼叫請求後,直到響應返回,閉包才會被呼叫,所以這個型別的網路請求函式內等待響應的閉包就是逃逸閉包。這…

Swift iOS : 記憶體管理

Swift 是自動管理記憶體的。這意味著,你不需要主動釋放記憶體。 比如 Foo 內包含的 Bar,可以隨同 Foo 一起被釋放: import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDele…

Swift iOS : 抽屜效果

可以使用DrawerController框架實現抽屜的效果。看起來還是蠻帥氣的。 需要做的就是一個DrawerController,3個ViewController。3個ViewController分別用於左側的抽屜,當前的抽屜,右側的抽屜。DrawerController用來…