最小的Swift App

如何經過經過純粹的代碼,而不依賴於Xcode的StoryBoard,來完成一個App?javascript

首先作些操做性的工做,具體過程是這樣的:java

  1. 打開xcode
  2. 建立一個Single View App

Xcode會進入主要編輯界面。此時,咱們打開AppDelegate.swift文件而後覆蓋源代碼爲以下:swift

import UIKit
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
        var window : UIWindow?
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            window = UIWindow()
            window!.rootViewController = UIViewController()
            window!.rootViewController!.view.backgroundColor = .blue
            window!.makeKeyAndVisible()
            return true
        }
    }複製代碼

運行後發現手機(或者仿真器)滿屏的藍色背景就說明成功了。設計模式

一塊兒來看看代碼。xcode

咱們須要導入UIKit:app

import UIKit複製代碼

框架UIKit用來構造和管理用戶界面、響應用戶交互和系統事件。既然須要建立App,引入UIKit是第一件須要作的工做。框架

接着查看AppDelegate類。它實現協議UIApplicationDelegate,且必須被標記爲@UIApplicationMain,二者配合就設置了App的程序入口點。AppDelegate實現了此協議中規定的函數:函數

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 複製代碼

這樣,UIKit就會在完成App啓動調用此函數,從而App能夠再次實現本身的初始化邏輯。spa

在本案例中,咱們在啓動函數中建立了window實例,它是UIWindow的實例。代碼隨即把window屬性的rootViewController設置爲UIViewController的實例。設計

爲了可視化的看到咱們的工做成果,咱們設置UIViewController的背景色爲藍色,設置的方式就是把屬性view背景色設置爲藍色,此屬性是類UIView的實例。

這樣,咱們完成了最基本的一個UI界面。

window和view是構建UI的關鍵構造塊,所以有必要澄清下概念。

每一個應用都有一個window,這個window並無任何外觀形象,每一個view都是被window包含在內的,事件處理也是首先路由到相應的window對象而後被導向到對應的視圖。

View定義了一個屏幕上的矩形區域,而且管理此區域的內容和用戶交互。window經過一個rootViewController的屬性view開始關聯,而後在此view內能夠經過addSubView加入更多的子視圖來完成UI的構建。

隨後咱們會接觸更多的view類型,實際上按鈕(UIButton)、標籤(UILabel)等能夠看到和交互的控件都是視圖的子類,View的使用時很是普遍的。

可能不少人會以爲AppDelegate這個名字過於冗長。爲此咱們得了解一個叫作Delegate的設計模式。Delegate是一個簡單而強大的設計模式,可讓其中一個對象委託一部分功能給另一個對象。作法就是發起對象持有委託對象的實例,並在適當的時間發起消息給委託對象,告訴委託對象將要發生的事件或者已經發生的事件。委託對象能夠更新用戶界面或者更新本身的狀態做爲響應。

在此案例中,關於委託牽涉到了兩個類包括UIApplication、AppDelegate,以及一個協議爲UIApplicationDelegate,UIApplication委託事件給AppDelegate,這裏的委託事件就是:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool複製代碼

以便讓在UIApplicationDelegate的對象能夠完成本身的初始化代碼。UIApplication和UIApplicationDelegate之間能夠創建一個協議,此協議規定二者之間能夠委託的具體內容,此協議就是UIApplicationDelegate規定的,能夠經過手冊瞭解此協議的更多資料。

這樣,咱們瞭解到了建造一個App涉及到的最少的類:UIApplication、UIApplicationDelegate、UIWindow、UIViewController,以及UIKit大量使用的委託設計模式,將來的文字將會以此爲墊腳石。

相關文章
相關標籤/搜索