使用Swift框架重複使用代碼

當您發現錯誤而且必須使用它修復全部應用程序時,複製和粘貼代碼會很糟糕。但有沒有辦法避免呢? 就在這裏! Apple提供了一種稱爲框架的工具來簡化代碼共享。此外,它還爲咱們提供了一種機制,能夠對相關代碼進行分組(模塊化)並限制對代碼的訪問(封裝)。 在本文中,咱們將介紹框架是什麼以及使用它們的緣由。我將按照一步一步的指導如何建立和構建框架,最後如何在應用程序中使用框架。框架中的代碼將專門用於本文的Swift編寫。 ##什麼是框架 框架是一個結構化目錄,能夠包含共享代碼和共享資源,如圖像,nib文件(xib和故事板的編譯形式)和其餘資產。您能夠將其視爲提供代碼和/或其餘可重用資產的包,以使您的代碼正常工做。 ##爲何使用框架 咱們已經介紹了使用框架的主要緣由。另外一個很好的理由是簡化與組織服務的集成。 例如,Paypal提供框架來幫助應用程序處理信用卡交易。 Onfido提供了進行遠程身份驗證的框架。 框架能夠節省您的客戶與您的服務的集成工做。爲客戶節省時間和金錢。更快的客戶能夠在您開始賺錢以前消費您的服務。 此外,在選擇提供者時,時間和精力多是前景的關鍵因素。事實上,價值超過92億美圓的Stripe開始出於對支付處理器的整合挫敗感。 ##如何構建一個框架 在本節中,咱們將指導您完成建立和構建框架的過程。該框架將包含一個簡單的登陸屏幕。 在接下來的步驟中,咱們將:編程

  1. 使用Cocoa Touch Framework模板建立項目
  2. 使用Xib添加一個視圖控制器
  3. 將視圖插入咱們的視圖控制器以容許用戶登陸
  4. 將Xib中的視圖鏈接到LoginViewController類
  5. 以編程方式加載視圖控制器
  6. 訪問框架外的視圖控制器 若是您已經熟悉這些,請隨意跳過任何部分或所有。 ###1. 建立項目 讓咱們首先在菜單欄中選擇File> New> Project ...,在Xcode中建立一個框架。
    建立一個新項目
    繼續選擇iOS Cocoa Touch Framework項目模板,而後單擊「下一步」。
    選擇Cocoa Touch Framework模板
    最後命名你的框架,你能夠爲所欲爲地命名它。個人名字是MyFramework。還要確保所選語言爲Swift。命名後,單擊**「下一步」**並選擇要存儲項目的位置,最後單擊「建立」。
    命名框架,例如MyFramework
    您如今應該有一個帶有空框架的項目。讓咱們繼續併爲咱們的項目添加一個可供多個應用程序使用的屏幕。 ###2. 添加視圖控制器 讓咱們繼續添加一個空的XIB文件,咱們將使用界面構建器設計咱們的登陸屏幕。從菜單欄中選擇File> New> File ...,而後選擇Cocoa Touch Class。
    從Cocoa Touch Class模板建立一個新文件
    將您的類命名爲LoginViewController,做爲UIViewController的子類。選中「建立XIB文件」選項。從語言下拉菜單中選擇Swift。
    將您的類命名爲LoginViewController,做爲UIViewController的子類。選中「建立XIB文件」選項。從語言下拉菜單中選擇Swift。
    使用Cocoa Touch Class模板,Xcode將添加一個XIB和一個Swift文件,其中包含咱們指定的名稱。它將爲咱們建立從XIB到視圖控制器的必要連接。 ###3. 向咱們的視圖控制器中添加視圖 此時咱們的LoginViewController XIB將徹底爲空。讓咱們爲電子郵件和密碼添加標籤和文本字段,以容許用戶進行身份驗證。

單擊對象庫。出現搜索欄時,搜索標籤,而後將標籤拖放到空白畫布上。 swift

將標籤視圖拖放到空白畫布上
對UITextField重複這三個步驟。
將TextField拖放到畫布上
根據須要對齊視圖,而後複製並粘貼它們,這樣您就有兩個標籤和兩個文本字段,一個用於電子郵件,另外一個用於密碼。使用有意義的文本編輯標籤,例如電子郵件和密碼。最後添加一個按鈕,容許用戶執行簽名操做。
複製並粘貼標籤和文本字段,重命名標籤並添加登陸按鈕
此時,咱們擁有了讓用戶登陸所需的一切。不要過多擔憂視圖的佈局和外觀,這超出了本文的範圍。 ###4. 將視圖鏈接到視圖控制器 在這一步中,咱們只須要建立一個從XIB中的電子郵件和密碼文本字段視圖到咱們的視圖控制器的連接,以從中獲取文本。此外,咱們還但願將登陸按鈕上的點擊操做鏈接到咱們將在其中進行登陸的視圖控制器上的功能。

首先打開LoginViewController.xib,而後打開助手編輯器,它是Xcode UI右上角的兩個相交循環圖標。 而後逐個選擇文本字段並按住Control鍵並將視圖拖放到視圖控制器上。這將打開一個彈出窗口,容許咱們配置XIB和視圖控制器之間的鏈接。如今將文本字段的鏈接設置爲Outlet,將名稱設置爲與每一個文本字段相關的內容,例如emailTextField,類型爲UITextField,以及從最後一個選擇弱選項。重複密碼文本字段的步驟。 如今拖放登陸按鈕,但在這種狀況下,選擇Action for connection,將其命名爲signIn,而後從類型下拉列表下方的下拉列表中選擇Touch Up Inside。這有點不一樣,咱們正在對視圖而不是視圖自己進行操做,在此咱們指定一個函數來響應登陸按鈕上的點擊。xcode

如今咱們將打印用戶名和密碼到控制檯。在登陸功能中添加如下行: print("username \(emailTextField.text) password \(passwordTextField.text)") 咱們如今擁有了讓用戶登陸所需的一切。咱們不會在這裏介紹身份驗證,代碼是演示訪問框架代碼和資源的應用程序。咱們將以編程方式加載視圖控制器,但在咱們完成以前,咱們的視圖控制器必須知道要加載哪一個XIB。 ###5. 以編程方式加載視圖控制器 咱們的XIB包含咱們的視圖聲明以及它們的結構,配置和連接方式。 XIB有一個關於誰與之連接以及如何連接的概念,可是咱們的視圖控制器不知道咱們的XIB,所以當咱們實例化視圖控制器時,就像如今同樣,咱們的視圖控制器上的視圖和連接將不會被建立。咱們必須告訴咱們的視圖控制器在實例化時從哪裏讀取它的視圖。爲咱們的視圖控制器添加如下自定義初始化函數,該函數從咱們的xib讀取:app

super.init(nibName: "LoginViewController", bundle: Bundle(for: LoginViewController.self))
}
required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
複製代碼

咱們將調用init()函數來實現咱們的視圖控制器。 UIViewController已經包含一個init函數,它容許咱們指定要讀取的XIB(文件名)以及在哪裏找到這個XIB文件; init(nibName:,bundle:)。對於XIB位置,咱們指定它將位於同一個包asLoginViewController類中。 咱們忽略所需的init?由於咱們不會使用它,可是當咱們想要一個自定義初始化程序時,咱們不得不在咱們的視圖控制器中指定它。 到目前爲止,咱們應該可以以編程方式加載視圖控制器,但僅限於框架內的代碼。咱們想從使用框架的應用程序初始化咱們的視圖控制器。 ###6. 訪問框架外的視圖控制器 Swift具備訪問控制,限制代碼的哪些部分能夠從其餘代碼訪問。當咱們沒有爲咱們的函數和變量指定任何訪問控制時,Swift將這些訪問控制默認爲內部訪問,這樣init()等同於內部init()。在這種狀況下,咱們框架中包含的全部代碼均可以訪問init函數,但不能訪問外部。爲了容許從咱們的框架外部訪問咱們的代碼,咱們必須在咱們的init函數前面加上公共訪問控制聲明,這樣咱們的init函數應該以下所示:框架

super.init(nibName: "LoginViewController", bundle: Bundle(for: LoginViewController.self))
}
複製代碼

但這並非讓咱們的init函數公開可用所需的所有內容。咱們的init函數存在於一個類中,該類也沒有指定訪問控制,所以是內部的。若是咱們的課程沒法訪問,那麼咱們的公共init方法將存在於其中。爲了彌補這一點,咱們還必須將公共訪問控制添加到咱們的類中。您可能必須在關鍵字覆蓋以後向任何函數添加public,可是 public class LoginViewController: UIViewController { ... } 如今咱們能夠從使用框架的應用程序初始化咱們的視圖控制器。編輯器

這就是咱們須要作的就是展現如何以標準化框架格式向其餘開發人員共享代碼和資源。 ##使用框架 在本節中,咱們將經過咱們如今將建立的應用程序來使用咱們在上一節中構建的框架。若是您跳過上一節,能夠在此處找到框架項目源代碼。 咱們將:ide

  1. 使用iOS應用目標建立新項目
  2. 添加登陸按鈕到咱們的視圖控制器
  3. 在按鈕點擊上顯示框架登陸屏幕 ###1. 建立一個新項目 讓咱們爲咱們的框架消費者應用程序建立一個新項目。從菜單欄中選擇File> New> Project .... 在iOS選項卡下搜索並選擇Single View App,而後單擊Next。 將MyApp做爲咱們的項目名稱。選擇Swift做爲語言。點擊下一步。
    單例應用的項目選項
    當提示保存新項目的位置時,爲方便起見,將其保存在框架項目的同一目錄下。 ###2. 添加一個登錄按鈕 讓咱們在咱們的視圖控制器上添加按鈕,該控制器是做爲Single View App模板的一部分自動建立的。打開Main.storyboard並將按鈕拖放到空白畫布上。就像咱們在框架項目前面的登陸按鈕所作的那樣,打開助手編輯器並將按鈕從故事板拖放到ViewController類上。將鏈接類型配置爲Action,將其命名爲login,並從類型下拉列表下方的下拉列表中選擇Touch Up Inside。您應該在ViewController類中具備如下空函數:
}
複製代碼

在登陸功能中,咱們但願從框架中顯示登陸屏幕。 ###3. 在按鈕點擊時展現框架中的登錄屏幕 此時咱們已經建立了一個新項目,爲自動建立的視圖控制器添加了一個按鈕,並將按鈕點擊鏈接到ViewController類中的一個函數。咱們但願在用戶點擊登陸按鈕時從咱們以前建立的框架中顯示登陸屏幕。但在咱們作到這一點以前,咱們首先必須將框架連接到咱們的應用程序。咱們能夠經過各類方式訪問​​框架,但在本文中,咱們將使用Xcode工做區來執行此操做。在工做區中,您能夠添加多個項目並將它們連接在一塊兒,就像在單個項目下同樣。 要建立工做區,請選擇「文件」>「新建」>「工做區...」,並將其命名爲MyApp。將其保存在與應用程序和框架項目相同的目錄中。 工做區最初將爲空,所以咱們將兩個項目添加到工做區。從菜單欄中選擇File> Add Files to「MyApp」...並添加分別位於名爲MyApp和MyFramework的目錄下的MyApp.xcodeproj和MyFramework.xcodeproj。確保其餘XCode窗口中沒有打開這些項目,不然它們不會顯示其內容。 接下來選擇MyApp項目文件(項目導航器中的藍色文檔圖標,位於右側窗格的第一個選項卡下)。而後在「常規」選項卡下的「項目設置」窗口中,在「嵌入式​​二進制文件」部分下單擊+按鈕。將出現一個新窗口,其中包含工做區中的全部選項。選擇MyFramework.framework,而後單擊「添加」。模塊化

向你的app中添加框架
如今咱們已經添加了框架,當用戶點擊登陸按鈕時,應用程序會顯示登陸屏幕。打開ViewController.swift並在導入UIKit下添加導入MyFramework,這將容許咱們從咱們的文件中訪問框架代碼。接下來,將如下代碼行添加到ViewController類中的login函數: present(LoginViewController(), animated: true, completion: nil) 當用戶點擊應用程序中的登陸按鈕時,此行將顯示框架中的登陸屏幕。

就這樣!如今您能夠運行該應用程序並自行查看它! ##總結 到如今爲止你應該知道:函數

  • 什麼是框架
  • 爲何你應該使用它們
  • 如何構建和使用它們 ##下一步 使用Xcode工做區使用框架很難。是否有更簡單的方法來使用框架?
相關文章
相關標籤/搜索