亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Swift重構(gòu)自定義空等運(yùn)算符 “??=” 實(shí)例

 更新時(shí)間:2023年03月13日 14:22:31   作者:SoaringHeart  
這篇文章主要為大家介紹了Swift重構(gòu)自定義空等運(yùn)算符 “??=” 實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、思路來(lái)源

最近在做 Flutter 開(kāi)發(fā)時(shí)發(fā)現(xiàn)一個(gè)之前沒(méi)注意到的空等運(yùn)算符 “??=”,代表左邊為空時(shí),才會(huì)把右邊的值賦給左邊,然后返回左邊的變量值;常用于避免多次賦值的情況;發(fā)現(xiàn)非常實(shí)用,于是給 swift 也自定義一個(gè)使用,最終如下;

二、示例

b1 獲取 a1 的值,a1 如果不為空直接返回;為空則賦值;

var a1: UIView?;
let b1 = a1 ??= UITableView();
print("a1: \(a1)");//a1: Optional(<UITableView: 0x7feda0830600;
print("b1: \(b1)");//b1: <UITableView: 0x7feda0830600

等同于:

var a1: UIView?;
if(a1 == nil) {
    a1 = UITableView();
}
let b1 = a1;

可以讓我們少寫(xiě)一行代碼;

三、源碼

precedencegroup NilEqualPrecedence {
  /// 優(yōu)先從左向右, left, right or none
  associativity: left
  higherThan: AssignmentPrecedence//優(yōu)先級(jí),比等號(hào)運(yùn)算符高
  // lowerThan: AdditionPrecedence // 優(yōu)先級(jí), 比...低
  assignment: true // 是否是賦值運(yùn)算
}
/// 空等運(yùn)算符聲明
infix operator ??=: NilEqualPrecedence
/// 空等運(yùn)算符實(shí)現(xiàn)
func ??= <T>(lhs: inout T?, rhs: T) -> T {
    if lhs == nil {
        lhs = rhs;
    }
    return lhs!;
 }

四、總結(jié)

Swift 最令人興奮的特性之一(盡管也有爭(zhēng)議)是自定義運(yùn)算符的能力。

在您自己的代碼中重寫(xiě)或定義新運(yùn)算符時(shí),請(qǐng)確保遵循以下準(zhǔn)則:

  • 不要?jiǎng)?chuàng)建運(yùn)算符,除非它的含義是顯而易見(jiàn)且無(wú)可爭(zhēng)議的。查找任何潛在的沖突以確保語(yǔ)義一致性。
  • 注意自定義算子的優(yōu)先級(jí)和關(guān)聯(lián)性,只根據(jù)需要定義新的算子組。
  • 如果有意義,請(qǐng)考慮為自定義運(yùn)算符實(shí)現(xiàn)分配變體。

編程工作的核心是創(chuàng)造。創(chuàng)造一切我們需要而沒(méi)有的函數(shù)、工具、腳本...

以上就是Swift重構(gòu)自定義空等運(yùn)算符 “??=” 實(shí)例的詳細(xì)內(nèi)容,更多關(guān)于Swift重構(gòu)自定義空等運(yùn)算符的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 淺談swift 4.0中private所發(fā)生的變化

    淺談swift 4.0中private所發(fā)生的變化

    Swift 4是蘋(píng)果計(jì)劃于2017年秋季推出的最新版本,其主要重點(diǎn)是提供與Swift 3代碼的源兼容性,并努力實(shí)現(xiàn)ABI穩(wěn)定性。下面這篇文章主要給大家介紹了關(guān)于swift 4.0中private所發(fā)生的一些變化,需要的朋友可以參考下。
    2017-12-12
  • 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開(kāi)發(fā)之UITableView狀態(tài)切換效果

    Swift開(kāi)發(fā)之UITableView狀態(tài)切換效果

    這篇文章主要介紹了Swift開(kāi)發(fā)之UITableView狀態(tài)切換效果的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • Swift實(shí)現(xiàn)文件壓縮和解壓示例代碼

    Swift實(shí)現(xiàn)文件壓縮和解壓示例代碼

    本篇文章主要介紹了Swift實(shí)現(xiàn)文件壓縮和解壓示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • Swift中通過(guò)疊加UILabel實(shí)現(xiàn)混合進(jìn)度條的方法

    Swift中通過(guò)疊加UILabel實(shí)現(xiàn)混合進(jìn)度條的方法

    這篇文章主要介紹了Swift中通過(guò)疊加UILabel實(shí)現(xiàn)混合進(jìn)度條的方法的相關(guān)資料,需要的朋友可以參考下
    2016-08-08
  • Swift 3中使用FMDB遇到的問(wèn)題與解決方法

    Swift 3中使用FMDB遇到的問(wèn)題與解決方法

    相信大家都熟悉OC使用FMDB第三方庫(kù),進(jìn)行數(shù)據(jù)庫(kù)操作,增、刪、改、查,但最近在Swift 3中使用FMDB遇到了一些問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于在Swift 3中使用FMDB遇到的問(wèn)題與解決方法,需要的朋友可以參考下。
    2017-07-07
  • 解析Swift中的泛型支持與使用

    解析Swift中的泛型支持與使用

    支持泛型意味著可以在規(guī)定參數(shù)類(lèi)型的情況下更靈活地編寫(xiě)程序,也是Swift語(yǔ)言先進(jìn)而又強(qiáng)大的體現(xiàn),這里我們就來(lái)解析Swift中的泛型支持與使用:
    2016-07-07
  • Swift循環(huán)遍歷集合的方法總結(jié)分享

    Swift循環(huán)遍歷集合的方法總結(jié)分享

    SWIFT是蘋(píng)果于2014年WWDC發(fā)布的新開(kāi)發(fā)語(yǔ)言,可與Objective-C*共同運(yùn)行于Mac OS和iOS平臺(tái),用于搭建基于蘋(píng)果平臺(tái)的應(yīng)用程序。這篇文章主要給大家總結(jié)介紹了關(guān)于Swift循環(huán)遍歷集合的方法,如for-in循環(huán)、for循環(huán)以及基于塊的遍歷等方法,需要的朋友可以參考下。
    2017-03-03
  • 探討Swift數(shù)組和字典

    探討Swift數(shù)組和字典

    Swift數(shù)組是具體的。他不同于Objective-C的的NSArray和NSMutableArray里的類(lèi),它可以存儲(chǔ)任何類(lèi)型的對(duì)象,不提供有關(guān)它們返回的對(duì)象的性質(zhì)的任何信息
    2015-12-12
  • RxSwift學(xué)習(xí)之Observable的新建、訂閱及取消訂閱

    RxSwift學(xué)習(xí)之Observable的新建、訂閱及取消訂閱

    這篇文章主要給大家介紹了關(guān)于RxSwift學(xué)習(xí)教程之Observable的相關(guān)資料,文中詳細(xì)的給大家介紹了關(guān)于新建Observable、訂閱Observable和取消訂閱并消除內(nèi)存泄漏等相關(guān)的內(nèi)容,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-09-09

最新評(píng)論