程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 在Swift中應用Objective-C編寫類、繼續Objective-C類

在Swift中應用Objective-C編寫類、繼續Objective-C類

編輯:更多關於編程

在Swift中應用Objective-C編寫類、繼續Objective-C類。本站提示廣大學習愛好者:(在Swift中應用Objective-C編寫類、繼續Objective-C類)文章只能為提供參考,不一定能成為您想要的結果。以下是在Swift中應用Objective-C編寫類、繼續Objective-C類正文


互用性(互操作性)使開辟者可以界說融會了 Objective-C 說話特征的Swift類。編寫 Swift 類時,不只可以繼續 Objective-C 說話編寫的父類,采取 Objective-C 的協定,還可以應用 Objective-C 的一些其它功效。這意味著,開辟者可以基於 Objective-C 中已有的熟習、靠得住的類、辦法和框架來創立 Swift 類,並聯合 Swift 供給的古代化和更有用的說話特色對其停止優化。

繼續Objective-C的類

在 Swift 中,開辟者可以界說一個子類,該子類繼續自應用 Objective-C 編寫的類。創立該子類的辦法是,在 Swift 的類名前面加上一個冒號(:),冒號前面跟上 Objective-C 的類名。

// SWIFT
import UIKit

class MySwiftViewController: UIViewController {
    // 界說類
}

開辟者可以或許從 Objective-C 的父類中繼續一切的功效。假如開辟者要籠罩父類中的辦法,不要忘卻應用override症結字。
采取協定

在 Swift 中,開辟者可以采取 Objective-C 中界說好的協定。和 Swift 協定一樣,一切 Objective-C 協定都寫在一個用逗號離隔的列表中,跟在地點類的父類名前面(假如它有父類的話)。

// SWIFT
class MySwiftViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    // 界說類
}

Objective-C 協定與 Swift 協定應用上是分歧的。假如開辟者想在 Swift 代碼中援用 UITableViewDelegate協定,可以直接應用UITableViewDelegate(跟在 Objective-C 中援用id<UITableViewDelegate\>是等價的)。

編寫結構器和析構器

Swift 的編譯器確保在初始化時,結構器不許可類裡有任何未初始化的屬性,如許做可以或許增長代碼的平安性和可猜測性。別的,與 Objective-C 說話分歧,Swift 不供給零丁的內存分派辦法供開辟者挪用。當你應用原生的 Swift 初始化辦法時(即便是和 Objective-C 類協作),Swift 會將 Objective-C 的初始化辦法轉換為 Swift 的初始化辦法。關於若何完成開辟者自界說結構器的更多信息,請檢查結構器。

當開辟者願望在類被釋放前,履行額定的清算任務時,須要履行一個析構進程來取代dealloc辦法。在實例被釋放前,Swift 會主動挪用析構器來履行析構進程。Swift 挪用完子類的析構器後,會主動挪用父類的析構器。當開辟者應用 Objective-C 類或許是繼續自 Objective-C 類的 Swift 類時,Swift 也會主動為開辟者挪用這個類的父類裡的dealloc辦法。關於若何完成開辟者自界說析構器的更多信息,請檢查析構器。

集成Interface Builder

Swift 編譯器包括一些屬性,使得開辟者的 Swift 類集成了 Interface Builder 裡的一些特點功效。和 Objective-C 裡一樣,你能在 Swift 外面應用 OutLets,actions 和及時襯著(live rendering)。

應用Outlets和Action

應用 Outlets 和 Action 可以銜接源代碼和 Interface Builder 的 UI 對象。在Swift外面應用 Outlets 和 Action,須要在屬性和辦法聲明前拔出@IBOutlet或許@IBAction症結字。聲明一個 Outlet聚集異樣是用@IBOutlet屬性,即為類型指定一個數組。

當開辟者在 Swift 外面聲清楚明了一個 Outlet 時,Swift 編譯器會主動將該類型轉換為弱(weak)、隱式(implicitly)、未包裝(unwrapped)的 optional(Object-c外面對應指針類型)數據類型,並為它分派一個初始化的空值nil。現實上,編譯器應用@IBOutlet weak var name: Type! = nil來取代 @IBOutlet var name: Type。編譯器將該類型轉換成了弱(weak)、隱式(implicitly)、未包裝(unwrapped)的 optional 類型,是以開辟者就不須要在結構器中為該類型分派一個初始值了。當開辟者從故事板(storyboard)或許xib文件外面初始化對象 class 後,界說好的 Outlet 和這些對象銜接在一路了,所以,這些 Outlet 是隱式的,未包裝的。因為創立的 outlets 普通都是弱關系,是以默許 outlets 是弱類型。

例如,上面的 Swift 代碼聲清楚明了一個具有 Outlet、Outlets 聚集和 Action 的類:


// SWIFT
class MyViewController: UIViewController {

    @IBOutlet var button: UIButton

    @IBOutlet var textFields: UITextField[]

    @IBAction func buttonTapped(AnyObject) {
        println("button tapped!")
    }
}

在buttonTapped辦法中,新聞發送者的信息沒有被應用,是以可以省略該辦法的參數名。
及時襯著(live rendering)

開辟者可以在Interface Builder頂用@IBDesignable和@IBInspectable來創立活潑、可交互的自界說視圖(view)。開辟者繼續UIView或許NSView來自界說一個視圖(view)時,可以在類聲明前添加@IBDesignable屬性。當你在 Interface Builder 裡添加了自界說的視圖後(在監督器面板的自界說視圖類中停止設置),Interface Builder 將在畫布上襯著你自界說的視圖。

留意:只能針對框架裡對象停止及時襯著

你也能夠將@IBInspectable屬性添加到和用戶界說的運轉時屬性兼容的類型屬性裡。如許,當開辟者將自界說的視圖添加到 Interface Builder 裡後,便可以在監督器面板中編纂這些屬性。


// SWIFT

@IBDesignable

class MyCustomView: UIView {
    @IBInspectable var textColor: UIColor
    @IBInspectable var iconHeight: CGFloat
    /* ... */
}

指明屬性特征

在 Objective-C 中,屬性平日都有一組特征(Attributes)解釋來指明該屬性的一些附加信息。在 Swift 中,開辟者可以經由過程分歧的辦法來指明屬性的這些特征。

強類型和弱類型

Swift 裡屬性默許都是強類型的。應用weak症結字潤飾一個屬性,能指明其對象存儲時是一個弱援用。該症結字僅能潤飾 optional 對象類型。更多的信息,請查閱特征。

讀/寫和只讀

在 Swift 中,沒有readwrite和readonly特征。當聲明一個存儲型屬性時,應用let潤飾其為只讀;應用var潤飾其為可讀/寫。當聲明一個盤算型屬性時,為其供給一個 getter 辦法,使其成為只讀的;供給 getter 辦法和 setter 辦法,使其成為可讀/寫的。更多信息,請查閱屬性。

拷貝

在 Swift 中,Objective-C 的copy特征被轉換為@NSCopying屬性。這一類的屬性必需遵照 NSCopying協定。更多信息,請查閱特征。

完成Core Data Managed Object子類

Core Data 供給了根本存儲和完成NSManagedObject子類的一組屬性。在 Core Data 模子中,與治理對象子類相干的特征或許關系的每一個屬性界說之前,將@NSmanaged特征參加。與 Objective-C 外面的 @dynamic特征相似,@NSManaged特征告訴 Swift 編譯器,這個屬性的存儲和完成將在運轉時完成。然則,與@dynamic分歧的是,@NSManaged特征僅在 Core Data 支撐中可用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved