最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Swift中使用Cocoa的現(xiàn)有設(shè)計(jì)模式介紹

 更新時(shí)間:2014年07月21日 10:01:45   投稿:junjie  
這篇文章主要介紹了在Swift中使用Cocoa的現(xiàn)有設(shè)計(jì)模式介紹,Cocoa是蘋果公司為Mac OS X所創(chuàng)建的原生面向?qū)ο蟮腁PI,是Mac OS X上五大API之一,需要的朋友可以參考下

使用 Cocoa 現(xiàn)有的一些設(shè)計(jì)模式,是幫助開(kāi)發(fā)者開(kāi)發(fā)一款擁有合理設(shè)計(jì)思路、穩(wěn)定的性能、良好的可擴(kuò)展性應(yīng)用的有效方法之一。這些模式都依賴于在 Objective-C 中定義的類。因?yàn)?Swift 與 Objective-C 的互用性,所以你依然可以在 Swift 代碼中使用這些設(shè)計(jì)模式。在一些情況下,你甚至可以使用 Swift 語(yǔ)言的特性擴(kuò)展或簡(jiǎn)化這些 Cocoa 設(shè)計(jì)模式,使這些設(shè)計(jì)模式更強(qiáng)大、更易于使用。

委托(Delegation)

在 Swift 和 Objective-C 中,委托通常由一個(gè)定義交互方法和遵循規(guī)范的委托屬性的協(xié)議表示。與 Objective-C 相比,當(dāng)你在 Swift 中繼承一個(gè)委托時(shí),雖然繼承模式不變,但是內(nèi)部的實(shí)現(xiàn)已經(jīng)改變了。就像在 Objective-C 中,在你向委托發(fā)送消息之前,不管它是不是 nil 你都會(huì)去查看,如果定義的方法是非必須實(shí)現(xiàn)的方法,不管委托有沒(méi)有實(shí)現(xiàn)這個(gè)方法,你也都會(huì)去查看。而在 Swift 中,通過(guò)保持類型安全的特性,可以有效的消除這些繁瑣、不必要的行為問(wèn)題。

下面列出的代碼可以說(shuō)明這個(gè)過(guò)程:

1.檢查 myDelegate 不為 nil。
2.檢查 myDelegate 是否實(shí)現(xiàn)了繼承的 window:willUseFullScreenContentSize: 方法。
3.如果myDelegate 不為 nil 并且實(shí)現(xiàn)了 window:willUseFullScreenContentSize: 方法4.那么調(diào)用該方法,將該方法的返回值分配給名為 fullScreenSize 的屬性。
將該方法的返回值輸出在控制臺(tái)。

復(fù)制代碼 代碼如下:

// @inteface MyObject : NSObject
// @property (nonatomic, weak) id<NSWindowDelegate> delegate;
// @end
if let fullScreenSize = myDelegate?.window?(myWindow, willUseFullScreenContentSize: mySize) {
    println(NSStringFromSize(fullScreenSize))
}

注意: 在一個(gè)完全使用 Swift 編寫的 app 中,在定義 delegate 屬性時(shí),它作為一個(gè)不定值的 NSWindowDelegate 對(duì)象,并將初始值設(shè)為 nil。

延遲初始化(Lazy Initialization)

你可以在 Lazy Stored Properties 中了解到更多關(guān)于延遲初始化的信息。

錯(cuò)誤報(bào)告(Error Reporting)

Swift 中的錯(cuò)誤報(bào)告模式沿用了 Objective-C 的模式,但 Swift 中不定值返回值的新特性給我們帶來(lái)了額外的好處。舉個(gè)很簡(jiǎn)單的例子,你用 Bool 值作為一個(gè)函數(shù)的返回值,用于標(biāo)識(shí)該函數(shù)是否執(zhí)行成功,當(dāng)你需要輸出錯(cuò)誤信息時(shí),你可以在函數(shù)中添加一個(gè)NSErrorPointer 類型的輸出參數(shù) NSError。這個(gè)類型類似 Objective-C 中的 NSError **,并增加了內(nèi)存安全性和非強(qiáng)制性的傳參。你可以使用 & 運(yùn)算符作為前綴引用一個(gè)不定值 NSError 類型作為 NSErrorPointer 對(duì)象傳遞錯(cuò)誤信息。如下面的代碼所示:

復(fù)制代碼 代碼如下:

var writeError : NSError?
let written = myString.writeToFile(path, atomically: false,
    encoding: NSUTF8StringEncoding,
    error: &writeError)
if !written {
    if let error = writeError {
        println("write failure: \(error.localizedDescription)")
    }
}

當(dāng)你實(shí)現(xiàn)自己的方法時(shí),你需要配置一個(gè) NSErrorPointer 對(duì)象,并將 NSErrorPointer 對(duì)象的 memory 屬性設(shè)為你創(chuàng)建的NSError 對(duì)象。首先檢查調(diào)用者傳遞的參數(shù),確保它是一個(gè)非 nil 的 NSError 對(duì)象。
復(fù)制純文本新窗口

復(fù)制代碼 代碼如下:

func contentsForType(typeName: String! error: NSErrorPointer) -> AnyObject! {
    if cannotProduceContentsForType(typeName) {
        if error {
            error.memory = NSError(domain: domain, code: code, userInfo: [:])
        }
        return nil
    }
    // ...
}

Target-Action模式(Target-Action)

當(dāng)有特定事件發(fā)生,需要一個(gè)對(duì)象向另一個(gè)對(duì)象發(fā)送消息時(shí),我們通常采用 Cocoa 的 Target-Action 設(shè)計(jì)模式。Swift 和 Objective-C 中的 Target-Action 模型基本類似。在 Swift 中,你可以使用 Selector 類型達(dá)到 Objective-C 中 selectors 的效果。請(qǐng)?jiān)?a target="_blank" rel="external nofollow" >Objective-C Selectors 中查看在 Swift 中使用 Target-Action 設(shè)計(jì)模式的示例。

類型匹配與統(tǒng)一規(guī)范(Introspection)

在 Objective-C 中,你可以使用 isKindOfClass: 方法檢查某個(gè)對(duì)象是否是指定類型,可以使用 conformsToProtocol: 方法檢查某個(gè)對(duì)象是否遵循特定協(xié)議的規(guī)范。在 Swift 中,你可以使用 is 運(yùn)算符完成上述的功能,或者也可以使用 as? 向下匹配指定類型。

你可以使用 is 運(yùn)算符檢查一個(gè)實(shí)例是否是指定的子類。如果該實(shí)例是指定的子類,那么 is 運(yùn)算結(jié)果為 true,反之為false。

復(fù)制代碼 代碼如下:

if object is UIButton {
    // object is of type UIButton
} else {
    // object is not of type UIButton
}

你也可以使用 as? 運(yùn)算符嘗試向下匹配子類型,as? 運(yùn)算符返回不定值,結(jié)合 if-let 語(yǔ)句使用。

復(fù)制代碼 代碼如下:

if let button = object as? UIButton {
    // object is successfully cast to type UIButton and bound to button
} else {
    // object could not be cast to type UIButton
}

請(qǐng)?jiān)?Type Casting 中查看更多信息。

檢查匹配協(xié)議的語(yǔ)法與檢查匹配類的語(yǔ)法是一樣的,下面是使用 as? 檢查匹配協(xié)議的示例:

復(fù)制代碼 代碼如下:

if let dataSource = object as? UITableViewDataSource {
    // object conforms to UITableViewDataSource and is bound to dataSource
} else {
    // object not conform to UITableViewDataSource
}

注意,當(dāng)做完匹配之后,dataSource 會(huì)轉(zhuǎn)換為 UITableViewDataSource 類型,所以你只能訪問(wèn)和調(diào)用UITableViewDataSource 協(xié)議定義的屬性和方法。當(dāng)你想進(jìn)行其他操作時(shí),必須將其轉(zhuǎn)換為其他的類型。

可以在 Protocols 查看更多相關(guān)信息。

相關(guān)文章

  • switch循環(huán)所支持的數(shù)據(jù)類型案例分析

    switch循環(huán)所支持的數(shù)據(jù)類型案例分析

    這篇文章主要介紹了switch循環(huán)所支持的數(shù)據(jù)類型,本文通過(guò)實(shí)際案例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Swift運(yùn)算符使用方法淺析

    Swift運(yùn)算符使用方法淺析

    Swift 語(yǔ)言支持大部分標(biāo)準(zhǔn) C 語(yǔ)言的運(yùn)算符,并且改進(jìn)了許多特性來(lái)使我們的代碼更加規(guī)范,其中主要包含算數(shù)運(yùn)算符、區(qū)間運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、賦值運(yùn)算符、自增自減運(yùn)算符、溢出運(yùn)算符等
    2022-09-09
  • Swift超詳細(xì)講解指針

    Swift超詳細(xì)講解指針

    從傳統(tǒng)的C代碼和與之無(wú)縫配合的Objective-C代碼遷移到Swift并非小工程,我們的代碼庫(kù)肯定會(huì)時(shí)不時(shí)出現(xiàn)一些和C協(xié)作的地方,如果想要繼續(xù)使用那些C?API的話,了解一些基本的Swift指針操作和使用的知識(shí)會(huì)很有幫助。下面通過(guò)這篇文章一起來(lái)學(xué)習(xí)下吧。
    2022-08-08
  • swift中AnyObject和Any的介紹與區(qū)別詳解

    swift中AnyObject和Any的介紹與區(qū)別詳解

    雖然使用swift開(kāi)發(fā)了一段時(shí)間,但是感覺(jué)對(duì)一些基礎(chǔ)的東西了解不是比較透徹,在查詢了許多資料以后還是打算自己動(dòng)手記錄一下,下面這篇文章主要給大家介紹了關(guān)于swift中AnyObject和Any的介紹與區(qū)別的相關(guān)資料,需要的朋友可以參考下。
    2017-12-12
  • 在Swift中使用KVO的細(xì)節(jié)以及內(nèi)部實(shí)現(xiàn)解析(推薦)

    在Swift中使用KVO的細(xì)節(jié)以及內(nèi)部實(shí)現(xiàn)解析(推薦)

    這篇文章主要介紹了在Swift中使用KVO的細(xì)節(jié)以及內(nèi)部實(shí)現(xiàn)解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Swift Access Control訪問(wèn)控制與斷言詳細(xì)介紹

    Swift Access Control訪問(wèn)控制與斷言詳細(xì)介紹

    這篇文章主要介紹了Swift Access Control訪問(wèn)控制與斷言,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • swift指針及內(nèi)存管理內(nèi)存綁定實(shí)例詳解

    swift指針及內(nèi)存管理內(nèi)存綁定實(shí)例詳解

    這篇文章主要為大家介紹了swift指針及內(nèi)存管理內(nèi)存綁定實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Swift教程之基礎(chǔ)數(shù)據(jù)類型詳解

    Swift教程之基礎(chǔ)數(shù)據(jù)類型詳解

    這篇文章主要介紹了Swift教程之基礎(chǔ)數(shù)據(jù)類型詳解,本文詳細(xì)講解了Swift中的基本數(shù)據(jù)類型和基本語(yǔ)法,例如常量和變量、注釋、分號(hào)、整數(shù)、數(shù)值類型轉(zhuǎn)換等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • Swift中風(fēng)味各異的類型擦除實(shí)例詳解

    Swift中風(fēng)味各異的類型擦除實(shí)例詳解

    你也許曾聽(tīng)過(guò)類型擦除,甚至也使用過(guò)標(biāo)準(zhǔn)庫(kù)提供的類型擦除類型如 AnySequence,下面這篇文章主要給大家介紹了關(guān)于Swift中風(fēng)味各異的類型擦除的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • swift 4自定義UITableCell的方法示例

    swift 4自定義UITableCell的方法示例

    這篇文章主要給大家介紹了關(guān)于swift 4自定義UITableCell的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06

最新評(píng)論

离岛区| 鄄城县| 安阳市| 朝阳县| 巴林左旗| 永平县| 巨野县| 南昌县| 兖州市| 梧州市| 周至县| 佛教| 滁州市| 麦盖提县| 永顺县| 固镇县| 安新县| 镇平县| 云林县| 册亨县| 浮山县| 台中县| 梁山县| 阳春市| 鱼台县| 盐边县| 合水县| 沭阳县| 芜湖市| 阜南县| 土默特右旗| 拜城县| 探索| 阜城县| 昭通市| 皋兰县| 普格县| 林芝县| 白银市| 锡林浩特市| 岱山县|